![첫 번째 줄을 유지하고 모든 단락의 내용을 모두 삭제합니다(특정 패턴까지).](https://linux55.com/image/162921/%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%EC%A4%84%EC%9D%84%20%EC%9C%A0%EC%A7%80%ED%95%98%EA%B3%A0%20%EB%AA%A8%EB%93%A0%20%EB%8B%A8%EB%9D%BD%EC%9D%98%20%EB%82%B4%EC%9A%A9%EC%9D%84%20%EB%AA%A8%EB%91%90%20%EC%82%AD%EC%A0%9C%ED%95%A9%EB%8B%88%EB%8B%A4(%ED%8A%B9%EC%A0%95%20%ED%8C%A8%ED%84%B4%EA%B9%8C%EC%A7%80)..png)
이와 같은 데이터가 포함된 로그 파일이 있습니다.
criteria (NO-NO) data/speed/profile_1
someting something useless data
something something useless data
more useless data
Old run: exit speed=22.5
Old run: ramp speed=15.2
New run: exit speed=28.2
New run: ramp speed=19.3
criteria (NO-NO) data/speed/profile 3
someting something useless data
something something useless data
more useless data
Old run: exit speed=25.3
Old run: ramp speed=18.6
New run: exit speed=29.5
New run: ramp speed=17.9
이것이 내가 원하는 결과입니다:
criteria (NO-NO) data/speed/profile_1
Old run: exit speed=22.5
Old run: ramp speed=15.2
New run: exit speed=28.2
New run: ramp speed=19.3
criteria (NO-NO) data/speed/profile 3
Old run: exit speed=25.3
Old run: ramp speed=18.6
New run: exit speed=29.5
New run: ramp speed=17.9
나는 awk 'NR==1||c-->0;/^$/{c=1}' logs.txt
각 단락의 첫 번째 줄을 가져오고 "Ref"라는 단어 앞의 모든 내용을 제거했지만 sed 's/^.*\(Ref\)/\1/' logs.txt
탭 문자만 제거했습니다. 원하는 출력을 얻기 위해 모든 것을 결합하는 방법을 잘 모르겠습니다.
답변1
다음과 같은 상태 저장 작업을 수행할 수 있습니다.
/first-pattern/ {print; p = 0} /second-pattern/ {p = 1} p
전임자.
$ awk '/^criteria/ {print; p = 0} /(Old|New) run:/ {p = 1} p' file.log
criteria (NO-NO) data/speed/profile_1
Old run: exit speed=22.5
Old run: ramp speed=15.2
New run: exit speed=28.2
New run: ramp speed=19.3
criteria (NO-NO) data/speed/profile 3
Old run: exit speed=25.3
Old run: ramp speed=18.6
New run: exit speed=29.5
New run: ramp speed=17.9
답변2
게시한 입력/출력 예제를 고려하면 필요한 것은 다음과 같습니다.
$ grep -v '^ [^ ]' file
criteria (NO-NO) data/speed/profile_1
Old run: exit speed=22.5
Old run: ramp speed=15.2
New run: exit speed=28.2
New run: ramp speed=19.3
criteria (NO-NO) data/speed/profile 3
Old run: exit speed=25.3
Old run: ramp speed=18.6
New run: exit speed=29.5
New run: ramp speed=17.9
이것이 필요한 전부가 아니라면 질문을 편집하여 보다 대표적인 입력/출력 예제를 제공하십시오.
답변3
범위 연산자를 사용하는 Gnu sed는 이 경우에 적합합니다.
$ sed -Ee '
/^criteria/,/^$/!d
//b
/(Old|New) run:/!d
' file
답변4
다음 명령을 사용해보십시오
awk '/criteria/||/:/{print $0}' filename