나는 책을 읽고 있었고 다음을 실행할 때까지 명령을 sed & awk
이해했다고 생각했습니다 .n
sed
$ echo -ne "abc\ncde\nfg\n" | sed "/c/{
n
/f/d
}"
산출:
abc
cde
fg
하지만 나는 그 줄이 fg
삭제될 것으로 예상했습니다.
프로세스에 대한 나의 이해:
c
해당 줄과 일치하면cde
다음 줄도 일치하므로fg
명령으로 삭제해야 합니다 ./f/d
f
나는 명령을 이해하고 간단하다고 확신합니다. 특히 저자는 대문자 명령이 N,D,P
더 어렵다고 썼기 때문에, 그것을 이해하면 어쨌든 소문자 명령도 이해할 수 있을 것입니다. 하지만 N
명령에는 아무런 어려움이 없습니다 .
답변1
문제는 행이 fg
패턴과 일치하지 않는다는 것입니다 /f/
.
첫 번째 줄이 abc
일치 하면 /c/
블록 내의 명령이 실행됩니다.
이
n
명령은 현재 패턴 공간을 인쇄abc
하고 패턴 공간을 다음 입력 줄로 바꿉니다cde
.cde
일치하는 항목이 없으면 삭제/f/
되지 않고d
표준 출력으로 인쇄됩니다.
이제 입력의 다음 줄을 읽고 fg
일치하는 항목이 없으면 /c/
코드 블록이 실행되지 않습니다.
l
ook 명령을 사용하여 이를 확인할 수 있습니다 :
echo -ne "abc\ncde\nfg\n" | sed -n "l;/c/{
n
/f/d
}"
산출:
abc$
fg$
l
스크립트 시작 부분에 ook 명령을 추가하면 코드 블록 외부에서 처리되는 입력 줄을 알 수 있습니다.
답변2
@don_crissti의 의견을 읽은 후 n
명령이 sed
.
n
..."/c/{...
다음 주기 분석에서 읽은(또는 다음) 행을 제외합니다. 따라서 n
내 예에서 2번 사용 하면 abc
일치하고 cde
읽힌 다음 fg
읽고 삭제됩니다.
$ echo -ne "abc\ncde\nfg\n" | sed "/c/{
n
n
/f/d
}"
산출:
abc
cde