为什么 grep 不给我所有找到的字符串?

为什么 grep 不给我所有找到的字符串?

我有一个 txt 文件,里面有 8 个“ATOMIC_POSITIONS”字符串,当我尝试用 ; 写入其中每一个时,

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然后循环遍历数组并打印每个元素。

相关内容