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 를 설치 하고 대신 사용할 수 있습니다 .grep
brew install grep
ggrep
또는 pcregrep
여러 줄 패턴 ( -M
) 을 지원 하는 을 사용할 수 있습니다 .
다음 ex
과 같은 명령 을 사용할 수도 있습니다 .
ex +"/aaa/;/cdn/p" -scq! file