sourcecode

새로운 행의 패턴을 grep로 지정하는 방법은 무엇입니까?

copyscript 2023. 4. 14. 22:01
반응형

새로운 행의 패턴을 grep로 지정하는 방법은 무엇입니까?

새로운 행의 패턴을 grep로 지정하는 방법은 무엇입니까?첫 줄에 새 줄, 끝에 새 줄.정규 표현 방식이 아닙니다.예를 들어 \n.

해라pcregrep보통이 아니라grep:

pcregrep -M "pattern1.*\n.*pattern2" filename

-M옵션을 사용하면 여러 줄에 걸쳐 일치할 수 있으므로 새 줄을 검색할 수 있습니다.\n.

grep패턴은 개개의 회선과 대조되기 때문에 패턴은 입력에서 발견된 새로운 회선과 일치할 수 없습니다.

그러나 다음과 같은 빈 행을 찾을 수 있습니다.

grep '^$' file
grep '^[[:space:]]*$' file # include white spaces 

@jarno 덕분에 -z 옵션에 대해 알고 있습니다.또, GNU grep 를 -P 옵션과 함께 사용하면, 와의 매칭이 가능하게 됩니다.:)

예:

grep -zoP 'foo\n\K.*'<<<$'foo\nbar'

결과:

bar

줄바꿈을 포함한 모든 것을 대조하는 예:

.*줄 바꿈과 일치하지 않습니다.줄바꿈을 포함한 모든 항목을 일치시키려면1 (.|\n)*:

grep -zoP 'foo\n\K(.|\n)*'<<<$'foo\nbar\nqux'

결과:

bar
qux

1 이쪽 : https://stackoverflow.com/a/33418344

이렇게 하면...

grep -P '^\s$' file
  • -PPerl 정규 표현(POSIX 확장)에 사용됩니다.grep).
  • \s공백 문자와 일치합니다(뒤에 이어지는 경우).*빈 행과도 일치합니다.
  • ^는 행의 선두와 일치합니다. $이 행의 말미와 일치합니다.

회피책의 경우(노트북을 사용하지 않음)-P)는, 새로운 행의 문자를 다른 행으로 일시적으로 치환하고, 다음과 같이 변경할 수 있습니다.

grep -o "_foo_" <(paste -sd_ file) | tr -d '_'

기본적으로 정확히 일치하는 것을 찾고 있습니다._foo_어디에_수단\n(따라서)__=\n\n)에 의해 번역할 필요가 없습니다.tr '_' '\n'각 패턴이 새로운 행에 인쇄되기 때문에, 삭제해 주세요._충분합니다.

막 찾았다

grep $'\r'

사용하고 있다$'\r'배쉬에서 C스타일의 탈출을 위해서요

기사에서

언급URL : https://stackoverflow.com/questions/12652568/how-to-give-a-pattern-for-new-line-in-grep

반응형