[bash] grep에서 새 줄에 패턴을 제공하는 방법은 무엇입니까?

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
  • -PPerl 정규 표현식에 사용됩니다 (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'어쨌든 각 패턴이 새 줄에 인쇄 되므로으로 다시 번역 할 필요가 없으므로 제거 _하면 충분합니다.


답변

방금 발견

grep $'\r'

$'\r'Bash에서 c 스타일 이스케이프에 사용 됩니다.

에서 이 문서


답변