@Ed Morton : 여기에 동의하지 않습니다. 나는 sed
매우 유용하고 간단하다는 것을 알았다 (패턴의 개념을 파악하고 버퍼를 유지하면).
예를 들어, 호스트 이름과 각 호스트에 대한 몇 가지 정보가있는 텍스트 파일을 가져 와서 그 사이에 내가 신경 쓰지 않는 쓰레기가 많이 들어갑니다.
Host: foo1
some junk, doesnt matter
some junk, doesnt matter
Info: about foo1 that I really care about!!
some junk, doesnt matter
some junk, doesnt matter
Info: a second line about foo1 that I really care about!!
some junk, doesnt matter
some junk, doesnt matter
Host: foo2
some junk, doesnt matter
Info: about foo2 that I really care about!!
some junk, doesnt matter
some junk, doesnt matter
나에게 호스트 이름과 해당 info
줄을 가져 오는 awk 스크립트 는 sed로 할 수있는 것보다 조금 더 걸릴 것입니다.
sed -n '/Host:/{h}; /Info/{x;p;x;p;}' myfile.txt
출력은 다음과 같습니다.
Host: foo1
Info: about foo1 that I really care about!!
Host: foo1
Info: a second line about foo1 that I really care about!!
Host: foo2
Info: about foo2 that I really care about!!
( Host: foo1
출력에 두 번 나타납니다.)
설명:
-n
명시 적으로 인쇄되지 않는 한 출력을 비활성화합니다.
- 첫 번째 일치,
Host:
행을 찾아서 보류 버퍼 (h)에 넣습니다.
- 두 번째 일치는 다음 Info : 행을 찾지 만 먼저 패턴 버퍼에서 현재 행을 홀드 버퍼와
Host:
교환 (x)하고 행을 인쇄 (p) 한 다음 Info : 행을 다시 교환 (x)하고 인쇄 (p)합니다.
예, 이것은 단순한 예이지만 간단한 sed one-liner로 빠르게 처리 된 일반적인 문제라고 생각합니다. 주어진 예측 가능한 시퀀스에 의존 할 수없는 작업과 같이 훨씬 더 복잡한 작업의 경우 awk가 더 적합 할 수 있습니다.
echo $'1\n2\n3\n4' | sed -n '1~2h;2~2{p;x;p}'