그래서 파일의 두 표현식 사이에 있는 모든 텍스트를 표시하고 싶습니다.
문서
ddd
eee
aaa
vvv
bbb
nnn
cdn
dds
aaa
xxx
xxx
xxx
따라서 다음 명령을 사용하십시오
cat $file |sed -n "/aaa/,/cdn/p"
알겠어요
aaa
vvv
bbb
nnn
cdn
aaa
xxx
xxx
xxx
어느 것이 맞습니까?
그러나 나는 시작 표현식과 끝 표현식 "사이"에 있는 텍스트만 원합니다. 그래서 닫는 표현 없이 텍스트를 표시하고 싶지 않습니다...
그래서 저는 이 결과를 얻을 수 있는 방법을 찾고 있습니다.
aaa
vvv
bbb
nnn
cdn
답변1
$ sed -n '/aaa/,/cdn/ { /aaa/h; //!H; /cdn/ { g; p; }; }' file
aaa
vvv
bbb
nnn
cdn
이는 시도 중인 명령과 동일한 범위를 사용하지만 해당 범위 내에서 일치하면 예약된 공간에 줄을 저장하고, aaa
일치하지 않으면 예약된 공간에 줄을 추가한 aaa
다음 예약된 공간을 가져와 인쇄합니다. 일치하는 경우 cdn
.
aaa
이렇게 하면 파일에서 둘 중 하나(또는 둘 다)가 반복되는 "가장 좁은" 영역이 추출됩니다. 즉 , 다음과 같은 입력을 의미합니다.cdn
aaa
cdn
111
111
aaa
222
222
aaa
333
333
cdn
444
444
cdn
당신에게 줄 것이다
aaa
333
333
cdn
...대신에첫 번째 aaa
도착하다마지막 cdn
.
다음을 사용하지 않고 동일한 내용을 표현하는 또 다른 방법 -n
:
sed -e '/aaa/,/cdn/!d' -e '/aaa/h' -e '//!H' -e '/cdn/!d' -e g file