sed는 헤더 행 + 일치하는 행을 유지합니다.

sed는 헤더 행 + 일치하는 행을 유지합니다.

다음을 수행할 수 있는 sed 명령을 찾지 못했습니다(추측할 수도 없습니다).

  • 인덱스 기반 유지: 특정 행(예: 헤더)
  • 유지: 패턴과 일치하는 행(예: grep)
  • 삭제: 다른 행

가장 좋은 접근 방식은 무엇입니까?

편집(예):

입력하다:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 188.165.65.214:53       0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.2:53            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:7777            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:587           0.0.0.0:*               LISTEN
tcp6       0      0 :::53                   :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:953                 :::*                    LISTEN
tcp6       0      0 :::443                  :::*                    LISTEN

출력: 라인 2와 패턴 7777을 유지하도록 요청한 후:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:7777            0.0.0.0:*               LISTEN

답변1

sed를 사용하면 쉽게 할 수 있습니다.

$ sed -e '2{
  p
  d
}
/7777/!d' file

또는 awk:

awk 'FNR==2 || /pattern/' file
  • 2은 헤더의 줄 번호이므로 원하는 줄 번호로 변경할 수 있습니다.
  • pattern일치시키려는 패턴입니다.

답변2

christian@fujiu1404:~/tmp$ cat f1
line 1 l
aaa bbb ccc ddd
111 111 111 111 abc
222 222 222 222
333 333 333 333 abc

christian@fujiu1404:~/tmp$ sed -n -e '2p' -e '/abc/p' f1
aaa bbb ccc ddd
111 111 111 111 abc
333 333 333 333 abc

고쳐 쓰다

입력/출력용

sed -n -e '2p' -e '/:7777/p'

관련 정보