검색 문자열을 찾은 후 "|_"의 특정 문자열을 찾으면 grep을 중지하는 방법을 찾고/검색 중입니다.
예를 들어, "address-info:" 위의 두 줄에서 시작하여 "|_" 줄에서 멈추는 줄만 인쇄하고 "사이에 관련 없는 줄"은 인쇄하지 않고 싶습니다. 그러나 이것은 어떤 방식으로든 인쇄할 수 있습니다.
입력하다:
Nmap scan report for ::1.2.3.4
Host script results:
| address-info:
| IPv4-compatible:
|_ IPv4 address: 1.2.3.4
...
irrelevant lines in between
irrelevant lines in between
irrelevant lines in between
...
Nmap scan report for ::ffff:1.2.3.4
Host script results:
| address-info:
| IPv4-mapped:
|_ IPv4 address: 1.2.3.4
...
irrelevant lines in between
irrelevant lines in between
irrelevant lines in between
...
Nmap scan report for 2001:0:506:708:282a:3d75:fefd:fcfb
Host script results:
| address-info:
| Teredo:
| Server IPv4 address: 5.6.7.8
| Client IPv4 address: 1.2.3.4
|_ UDP port: 49802
산출:
Nmap scan report for ::1.2.3.4
Host script results:
| address-info:
| IPv4-compatible:
|_ IPv4 address: 1.2.3.4
Nmap scan report for ::ffff:1.2.3.4
Host script results:
| address-info:
| IPv4-mapped:
|_ IPv4 address: 1.2.3.4
Nmap scan report for 2001:0:506:708:282a:3d75:fefd:fcfb
Host script results:
| address-info:
| Teredo:
| Server IPv4 address: 5.6.7.8
| Client IPv4 address: 1.2.3.4
|_ UDP port: 49802
나는 man grep을 읽고 -A -B -C 옵션을 찾았습니다. -B의 경우 줄 수를 미리 알고 있기 때문에 괜찮습니다. 그러나 -A의 경우 임의로 높은 값이 제공됩니다. 즉, 99999입니다.
grep -A99999 -B2 address-info: INPUT.txt
awk의 파이프를 통해 "|_"를 찾으세요.
awk 'BEGIN {PAT=1} PAT == 1 {print $0} $1 ~ /^|_/ {PAT=0}
전반적으로:
grep -A99999 -B2 address-info: INPUT.txt | awk 'BEGIN {PAT=1} PAT == 1 {print $0} $1 ~ /^|_/ {PAT=0}'
이는 범용적이지 않고(99999를 초과하는 "주소 정보:" 및 "|_" 줄의 경우 작동(가능성은 거의 없지만 가능함)), CPU/MEM 비효율성, 깔끔하지 못하므로 프로덕션 모드에서는 허용되지 않습니다.
grep 명령에서 이를 달성하는 방법을 찾고 싶습니다.
어떤 아이디어가 있나요?
답변1
awk
범위와 함께 직접 사용:
awk '/^Nmap scan report/;/^Host script results/,/\|_/' INPUT.txt
grep
"범위" 기능이 없습니다. 하지만 파이프 grep address-info: -B2 -A 99999
로 처리할 수는 있습니다.
답변2
grep
원하는 줄의 시작 부분을 일치시키 려면 (다른 줄과의 불일치 테스트):
grep -E '^(Nmap scan report for|Host script results:|\|[ _])' INPUT.txt
또는 sed
범위 패턴(예:이상한 솔루션)
sed -n '/^Nmap scan report for/,/^|_/p' INPUT.txt
- 시작:
^Nmap scan report for
- 끝:
^|_