grep에서 새 줄에 패턴을 제공하는 방법은 무엇입니까? 처음에는 새 줄, 끝에는 새 줄. 정규식 방식이 아닙니다. \ n 같은 것.
답변
grep
패턴은 개별 줄과 일치하므로 패턴이 입력에서 찾은 줄 바꿈과 일치 할 방법이 없습니다.
그러나 다음과 같은 빈 줄을 찾을 수 있습니다.
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
답변
pcregrep
일반 대신 시도하십시오 grep
.
pcregrep -M "pattern1.*\n.*pattern2" filename
이 -M
옵션을 사용하면 여러 줄에 걸쳐 일치시킬 수 있으므로 개행 문자를 \n
.
답변
이런 식으로 사용할 수 있습니다 …
grep -P '^\s$' file
-P
Perl 정규 표현식에 사용됩니다 (POSIX 확장grep
).\s
공백 문자와 일치합니다. 뒤에이면*
빈 줄도 일치합니다.^
줄의 시작과 일치합니다.$
줄의 끝과 일치합니다.
답변
@jarno 덕분에 나는 -z 옵션에 대해 알고 있으며 -P 옵션과 함께 GNU grep을 사용할 때 일치하는 \n
것이 가능하다는 것을 알았습니다 . 🙂
예:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
인쇄물 bar
답변
해결 방법 (non-portable을 사용하지 않음)에 관해서는 -P
개행 문자를 임시로 다른 문자로 바꾸고 다시 변경할 수 있습니다. 예 :
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
기본적으로 그것은 정확히 일치 찾고 _foo_
곳 _
수단을 \n
(너무 __
= \n\n
). tr '_' '\n'
어쨌든 각 패턴이 새 줄에 인쇄 되므로으로 다시 번역 할 필요가 없으므로 제거 _
하면 충분합니다.
