grepが見つかった文字列をすべて提供しないのはなぜですか?

grepが見つかった文字列をすべて提供しないのはなぜですか?

8つの "ATOMIC_POSITIONS"文字列を含むtxtファイルがあり、それぞれに;

AtomicPos=$(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt)
echo $AtomicPos

私に最後のものだけを与えた。

4779:ATOMIC_POSITIONS (bohr)

4779は行番号、最後の行です。実際、その後は最後の「ATOMIC_POSITIONS」以降の行を取得しようとしましたが、最後の行を取得しようとしましたが、最後の行を直接提供するので、次のように続けます。

$NtL=262
i=1
until [ $i == $NtL ]
do
Pos=$(grep -A $i ATOMIC_POSITIONS  hw1_out_si_wire.txt)
echo $Pos
i=$(expr $i + 1)
unset Pos
done

しかし、実行すると、最初の「ATOMIC_POSITIONS」から始まり続けます。

誰かがこれがなぜ説明できますか?

答え1

grep 出力を配列に読み込むには、次の変更を行う必要があります。

AtomicPos=$(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt)

到着

AtomicPos=( $(grep -n "ATOMIC_POSITIONS" hw1_out_si_wire.txt) )

これは一致するすべてのパターンを持ち、AtomicPos配列を繰り返して各要素を印刷します。

関連情報