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

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

텍스트 파일에서 특정 줄을 인쇄하기 위해 다음 솔루션을 발견했습니다.

sed '123!d;q' file

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

답변1

영어로 이 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

관련 정보