grep에서 새 줄에 패턴을 제공하는 방법은 무엇입니까? 처음에는 새 줄, 끝에는 새 줄. 정규식 방식이 아닙니다. \ n 같은 것.
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
공백 문자와 일치합니다. 뒤에이면 *
빈 줄도 일치합니다.^
줄의 시작과 일치합니다. $
줄의 끝과 일치합니다. -P
GNU 확장입니다. 나는 상황이 그것을 요구할 때 그것을 사용하는 것이 좋지만 (일반적으로 lookahead / lookbehind) POSIX grep은 [[:space:]]
.
-P
. GNU는 어쨌든 꽤 표준입니다. :)
brew install grep
여러면에서 우수한 GNU grep을 얻고 싶을 것 입니다. apple.stackexchange.com/questions/193288/…
@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'
어쨌든 각 패턴이 새 줄에 인쇄 되므로으로 다시 번역 할 필요가 없으므로 제거 _
하면 충분합니다.
<(p paste -sd_ file )
없습니까?
new line at the beginning
빈 줄이며new line at end
파일의 모든 줄에 적용됩니다. 예제를 게시 할 수 있습니까?