다음과 같은 파일이 있습니다.
DN: 다나안
cn: 새해
cn: 새해 1
도메인 이름: danian2
cn: 새해 2
도메인 이름: danian3
cn: 새해 3
cn: 새해 4
내가 원하는 것은 "dn:" 패턴에 대해 grep을 수행하고 다음 두 줄만 인쇄하는 것입니다. 그러나 grep -A 2 "dn:"을 실행하면 결과는 파일의 모든 것이므로 다음 두 줄만 인쇄하고 싶습니다. 행 행이 1개 아래 행이 아닙니다.
답변1
이것은 효과가 있을 수 있습니다:
$ awk -v RS="dn: " -v FS="\n" -v ORS="" 'NF>3 {print "dn:",$0}' input.txt
우리는 이를 dn:
레코드 구분자로 정의합니다. 레코드의 필드는 줄 바꿈으로 구분됩니다 \n
.
로 시작하는 줄 뒤에 두 줄이 있는 경우 dn:
새 레코드가 로 시작하기 전에 3개의 "\n"이 생기 dn:
므로 레코드에 4개의 필드가 생깁니다. 그래서 레코드( NF>3
)에 3개 이상의 필드가 있는지 확인합니다. 이 경우 전체 레코드를 인쇄하지만 앞에 추가해야 합니다 dn:
.
이렇게 하면 NF>3
레코드에 두 줄 이상이 있는 모든 레코드가 검색됩니다. 정확히 2개만 원하는 경우 로 변경하세요 NF==3
.
블록이 빈 줄로 구분된 경우(나중 의견 중 하나에서 알 수 있듯이) 대신 다음을 사용하십시오.
$ awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}' input.txt
답변2
위의 명령을 실행했는데 잘 작동했습니다.
awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" 'NF>2 {print $0}'
구분된 블록은 비어 있으며 정상적으로 작동합니다.