이 sed 명령은 왜
sed /^a/,/i$/p
"a"로 시작하고 "i"로 끝나는 줄뿐만 아니라 모든 줄을 인쇄합니까? 그게 어떻게 작동하는지 잘 모르겠습니다 sed /BEGIN/,/END/p
.
표준 입력:
arthuri
John
Johnny
Michael
표준 출력:
arthuri
arthuri
John
John
Johnny
Johnny
Michael
Michael
답변1
sed
기본적으로 d
패턴 공간은 명령이 호출되지 않는 한 각 주기가 끝날 때 인쇄됩니다.
이 기능은 이 옵션을 사용하거나 -n
스크립트의 첫 번째 줄을 다음으로 설정하여 비활성화할 수 있습니다.sed
#n
sed
따라서 여기서는 기본적으로 인쇄 하는 것 외에도반품a
첫 번째 줄로 시작하고 끝나는 줄로 시작하는 패턴 공간을 인쇄합니다.이후로 끝납니다 i
.
입력의 첫 번째 줄은 arthuri
( ) 로 시작 a
하지만 그 끝 이후에는 줄이 없으므로 i
범위는 /^a/,/i$/
끝나지 않고 모든 줄이 인쇄됩니다(기본적으로 끝에 두 번 인쇄되기 때문에).
sed
범위에는 항상 최소 2줄이 포함됩니다(입력의 마지막 줄에서 시작하는 특별한 경우는 제외).
시작 줄과 끝 줄이 동일하도록 하려면( 로 시작하고 끝나는 경우와 마찬가지로 arthuri
) 다음을 사용할 수 있습니다.a
i
awk
awk '/^a/, /i$/'
또는 perl
:
perl -ne 'print if /^a/ .. /i$/'
a
로 시작하고 끝나는 줄을 인쇄하려면 i
주소 범위를 사용하지 말고 다음을 따르세요.
sed '/^a/!d; /i$/!d'
또는:
sed '/^a.*i$/!d'
또는:
sed -n '/^a.*i$/p'
여기에서는 다음을 사용할 수도 있습니다 grep
.
grep -x 'a.*i'
^
, *
및 는 $
많은 쉘 구문에서 특수 문자입니다. 일반적으로 sed
코드 매개변수를 인용하려고 합니다 .