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배열을 반복하여 각 요소를 인쇄하게 됩니다.

관련 정보