2

如果您使用多行和每行多个单词执行 grep 命令,则输出似乎按单词而不是按行存储在数组中。您如何更改它以使其按行存储?

例如:

first_title=( $(egrep -o 'class\=\"title\" title\=\"'.\{1,80\} index.html
| egrep -o title\=\".*\"\> | sed 's/title\=\"//g' | sed 's/">//g') )


echo ${first_title[0]}

如果这返回 10 行,并且第一个读取“这是一行”

它只会输出“这个”

4

2 回答 2

3

您可以使用 IFS 更改字段分隔符:

IFS='
'
first_title=( $(egrep -o 'class\=\"title\" title\=\"'.\{1,80\} index.html
| egrep -o title\=\".*\"\> | sed 's/title\=\"//g' | sed 's/">//g') )


echo ${first_title[0]}
unset IFS
于 2012-10-07T06:11:27.350 回答
0

如果要添加带有空格的元素,则需要像以下示例中那样引用它:

arr=( "this is a line" "this is another line" this is some words )
echo "${arr[0]}"
this is a line
printf '%s\n' "${arr[@]}"
this is a line
this is another line
this
is
some
words

所以在你的情况下,尝试这样的事情:

first_title=(
    $(
        egrep -o 'class\=\"title\" title\=\"'.\{1,80\} index.html |
            egrep -o title\=\".*\"\> |
            sed 's/title\=\"//g;
                s/">//g;
                s/.*/"&"/'
    )
)


echo "${first_title[0]}"
于 2012-10-07T05:57:39.893 回答