문서에는 sed
다음과 같이 명시되어 있습니다 d
.
패턴 공간을 삭제하고 즉시 다음 사이클을 시작하세요.
sed
없이 실행 하면 명령 후에 패턴 공간이 자동으로 인쇄 -n
됩니까 ? 이 경우 패턴 공간이 비어 있다는 것을 알고 있습니다. 따라서 인쇄하는 것과 인쇄하지 않는 것에는 차이가 없습니다. 하지만 그냥 궁금해서요.sed
d
다음 예가 있습니다.
root@u1804:~# seq 10 | sed -r '/5/d'
1
2
3
4
6
7
8
9
10
root@u1804:~#
보시다시피 아무것도 없습니다 . 실행이 다음 루프로 직접 진행되기 5
때문인가요 , 아니면 자동 인쇄 패턴 공간이 빈 문자열을 인쇄하기 때문인가요?d
답변1
예, d
루프를 다시 시작하면 자동으로 인쇄되지 않습니다. d
via와 같은 명령을 실행한 후 패턴 공간에 추가 하려고 하거나 아무것도 인쇄되지 않는지 쉽게 알 수 있습니다. G
시도해 보세요 . 저장한 다음 via에 추가하려고 해도 두 번 인쇄되지 않습니다. 이유는 매우 간단합니다. 마지막 명령은 절대 실행되지 않습니다. 그 이후의 모든 것(자동 인쇄 포함)은 무시됩니다(즉, 현재 주소의 경우).s/^/STUFF/
seq 3 | sed '1h;2d;2G'
1
1h
2G
d
기준이 아주 명확해요:
명시적으로 새 루프를 시작하는 명령이 없는 경우 스크립트 끝에서 패턴 공간은
-n
지정되지 않은 한 표준 출력에 복사되어야 하며 패턴 공간은 삭제되어야 합니다.
그것은 또한당신이 인용한 매뉴얼:
d
기본적으로 sed는 처리된 모든 입력을 인쇄합니다( 다음과 같은 명령으로 수정/제거된 입력 제외).