두 패턴 사이(및 포함)의 선을 인쇄합니다.

두 패턴 사이(및 포함)의 선을 인쇄합니다.

CKD줄 끝의 줄에서 grep을 시작하고 줄 끝의 줄에서 grep을 중지하고 싶습니다 . 나는 그것을 시도했지만 grep "$CK" "$D" file..txt성공하지 못했습니다.

입력하다:

kkkkkkkkkkk   
jjjjjjjjjjjjjjjjjj  
gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D  
GGGGGGGGGGGGGG  
GGGGGGGGGGGGGG

원하는 출력:

gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D

답변1

사용하시면 좋을 것 같아요또는

awk '/CK$/,/D$/' file.txt

또는

sed -n '/CK$/,/D$/p' file.txt

당신이 주장하는 경우, 이는 GNU grep 방식입니다.

grep -oPz '(?s)(?<=\n)\N+CK\n.*?D(?=\n)' file.txt

여기

-PPerl-regexp 활성화

-z줄 구분 기호를 NUL로 설정합니다. 이렇게 하면 grep이 전체 파일을 한 줄로 처리하게 됩니다.

-o일치하는 것만 인쇄

(?s).모든 문자나 개행 문자를 찾을 수 있도록 PCRE_DOTALL을 활성화하세요.

\N줄 바꿈을 제외한 모든 항목과 일치합니다.

.*?비 욕심 모드에서.

(?<=..)역방향 주장이다

(?=..)예견 주장이다

답변2

BSD를 사용하는 경우 grep(perl regex 매개변수는 지원되지 않음 -P) 해결 방법은 다음과 같습니다.

grep -o "aaa.*cdn" <(paste -sd_ file) | tr '_' '\n'

_이는 모든 줄을 연결하고(새 줄을 문자로 대체 ) 단일 줄 모드를 확인한 다음 줄을 다시 원래 상태로 확장하여 수행됩니다 .

GNU를 사용하는 경우 grep에서 여러 줄 일치를 달성할 수 있지만 다른 항목에서 언급한 것처럼 ( ) grep에 대해 perl-regexp를 사용해야 합니다.grep-P답변. 여전히 grepmacOS에 GNU를 설치 brew install grep하고 사용할 수 있습니다 ggrep.


아니면 당신은 사용할 수 있습니다pcregrep다중 라인 모드( -M)를 지원합니다.


ex다음과 같은 명령을 사용할 수도 있습니다 .

ex +"/aaa/;/cdn/p" -scq! file

답변3

`awk '/CK$/{f=1}/D$/{f=0;print;exit}f' filename

gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D

답변4

Perl(5) 사용:

perl -nE 'print $_ if /CK$/.../D$/;'

Raku(이전 Perl_6) 사용:

raku -ne 'put $_ if /CK$/fff/D$/;'

위의 두 코드 줄 모두 sed와 유사한 "트리거" 연산자를 사용합니다. Perl5에서는 sed와 유사한 "trigger"의 철자가 입니다 .... Raku에서 "trigger"는 sed 와 같습니다 fff.

입력 예:

kkkkkkkkkkk   
jjjjjjjjjjjjjjjjjj  
gggggggggggg/CK  
JHGHHHHHHHH   
HJKHKKLKLLL   
JNBHBHJKJJLKKL  
JLKKKLLKJLKJ/D  
GGGGGGGGGGGGGG  
GGGGGGGGGGGGGG

출력 예(Perl5 또는 Raku):

gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D

Raku는 .점을 사용하여 연산을 연결하므로 ...로 시작하는 Raku 코드는 ... put $_로 작성할 수 있습니다 $_.put. 또한 메소드 체인이 .점으로 시작하는 경우 Raku는 기본적으로 $_테마 변수에서 체인을 호출합니다. 따라서 위에 주어진 Raku 코드는 $_.put... 로 단축되거나 더 단축 될 수 있습니다 .put... .

https://perldoc.perl.org/perlop
https://raku.org

관련 정보