CK줄 끝에있는 줄에서 grepping을 시작하고 줄이 끝에 grepping을 멈추고 싶습니다 D. 시도 grep "$CK" "$D" file..txt했지만 작동하지 않았습니다.
입력:
kkkkkkkkkkk
jjjjjjjjjjjjjjjjjj
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
GGGGGGGGGGGGGG
GGGGGGGGGGGGGG
원하는 출력 :
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
답변
awk '/CK$/,/D$/' file.txt
또는
sed -n '/CK$/,/D$/p' file.txt
grep 을 고집한다면 여기에 GNU grep 방식이 있습니다.
grep -oPz '(?s)(?<=\n)\N+CK\n.*?D(?=\n)' file.txt
여기
-P perl-regexp를 활성화합니다
-z줄 구분 기호를 NUL로 설정합니다. 그러면 grep이 전체 파일을 한 줄로 보게됩니다.
-o 일치하는 인쇄 만
(?s)PCRE_DOTALL을 활성화하므로 .모든 문자 또는 줄 바꿈을 찾습니다.
\N 개행을 제외한 모든 것과 일치
.*?찾습니다. 욕심없는 모드
(?<=..) 뒤에 숨어있는 주장이다
(?=..) 미리보기 주장입니다
답변
BSD를 사용하는 경우 grep(perl regex param을 지원하지 않음 -P), 해결 방법은 다음과 같습니다.
grep -o "aaa.*cdn" <(paste -sd_ file) | tr '_' '\n'
이것은 모든 줄을 연결하고 ( _문자 로 새 줄 바꾸기 ) 한 줄 패턴을 확인하고 줄을 원래 상태로 다시 확장하여 작동합니다.
GNU를 사용하는 경우에는 여러 줄을 grep일치시킬 수 grep있지만 다른 답변 에서 언급 한 것처럼 grep( -P)에 perl-regexp를 사용해야 합니다. 여전히 macOS에 GNU 를 설치 하고 대신 사용할 수 있습니다 .grepbrew install grepggrep
또는 pcregrep여러 줄 패턴 ( -M) 을 지원 하는 을 사용할 수 있습니다 .
다음 ex과 같은 명령 을 사용할 수도 있습니다 .
ex +"/aaa/;/cdn/p" -scq! file