[unix] 이 sed 명령은 어떻게 작동합니까?

텍스트 파일에서 특정 줄을 인쇄하기 위해이 솔루션을 보았습니다.

sed '123!d;q' file

이 경우 첫 번째 입력 줄 후에 sed가 종료되지 않는 이유는 무엇입니까?



답변

영어로이 sed프로그램의 의미는 다음과 같습니다.

  • [ 123!] 현재 줄 번호가 123이 아닌 경우 [ d]는 현재 줄을 삭제하고 다음 사이클을 시작합니다 (즉, 다음 줄로 이동).
  • 그런 다음 ( d명령이 실행되지 않은 경우에만이 지점에 도달합니다. ) [ q]는 더 이상 줄을 처리하지 않고 종료합니다 (그러나 죽어가는 선에 현재 줄을 인쇄합니다).

또는 원하는 경우 쉘 구문에서 :

line_number=0
while IFS= read -r pattern_space; do
  line_number=$(($line_number+1))
  if [ $line_number -ne 123 ]; then       # 123!
    continue                              #   d
  fi
  echo "$pattern_space"; break            # q
  echo "$pattern_space"                   # implicit final print (never reached)
done


답변