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


12

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

sed '123!d;q' file

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

답변:


20

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

고마워, 나도 그것을 정리했다. 내 오류는 내가 아니라 !연결되어 이해했다는 것 입니다. d123
rozcietrzewiacz

@ Gilles : 중괄호가 누락 되어 모든 줄에 적용 {d;q;}해서는 안됩니다 q(첫 번째 줄만 적용)?
enzotib

1
@enzotib q는 실행되는 모든 라인에 적용됩니다. 그러나 행 번호가 123이 아닌 경우 d명령이 실행되며 그 의미는 즉시 다음 입력 행으로 건너 뛰는 것입니다.
Gilles 'SO- 악마 그만해

명백한 설명
Rahul Patil

본질적으로 그것은 어쨌든 아무것도하지 않을 잠재적으로 수천 줄을 처리하지 않고 123 줄 이후에 멈추는sed -n 123p 것을 제외하고는 동일한 출력을 인쇄합니다 .
와일드 카드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.