다음을 수행할 수 있는 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'