2

複数行でgrepコマンドを実行し、1行に複数の単語がある場合、出力は行ではなく単語ごとに配列に格納されているように見えます。行ごとに保存されるように変更するにはどうすればよいですか?

例えば:

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行を返し、最初に「これは行です」と表示された場合

「This」のみを出力します

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 に答える