내가 다음을 한다고 가정해보자
grep 'header\|error'
이제 빈 헤더 "섹션"을 모두 제거하고 싶습니다. 예를 들어 다음과 같은 출력을 원합니다.
header 1
header 2
error a
error b
header 3
error c
header 4
header 5
error d
~이 되다
header 2
error a
error b
header 3
error c
header 5
error d
답변1
입력이 표시된 것과 같다고 가정합니다. 즉, 모든 입력 줄은 "제목" 또는 "오류" 줄이고 다른 것은 없습니다...
이것은 작동합니다:
$ cat test.sh
grep -B1 --no-group-separator ^error << EOF
header 1
header 2
error a
error b
header 3
error c
header 4
header 5
error d
EOF
$ ./test.sh
header 2
error a
error b
header 3
error c
header 5
error d
스크립트는 "error"로 시작하는 각 줄을 인쇄하고 그 앞의 줄을 인쇄합니다.
답변2
시작점으로 다음과 같이 플레이할 수 있습니다.
grep -zoP 'header.*\nerror.*\n|error.*\n' file.txt
-z
- 파일을 한 줄로 처리하여 '\n'을 할 수 있습니다.-o
- 일치하는 텍스트만 인쇄-P
- Perl 스타일 정규식 활성화