Grep/egrep에 대한 Regex101은 아무것도 반환하지 않습니다.

Grep/egrep에 대한 Regex101은 아무것도 반환하지 않습니다.

나는 마크다운 파일에서 일부 콘텐츠를 잘라내기 위해 다음 정규식을 사용해 왔습니다. 이는 regex101에서 훌륭하게 작동하지만 grep에서 이를 사용할 수 없는 것 같습니다.

오류가 발생하거나 아무것도 반환되지 않습니다.

정규식은 다음과 같습니다.https://regex101.com/r/XDImM9/1 또는(?s)##\s\[v0.0.1].+?(?=---)

PCRE 스타일 정규 표현식을 지원해야 하는 grep 및 -P 플래그를 사용해 보았지만 별 효과가 없는 것 같습니다. grep -P 'm/(?s)##\s\[v0.0.1].+?(?=---)/' CHANAGELOG.md

제가 작업한 샘플 데이터는 다음과 같습니다.

# Changelog

All notable changes to this project will be documented in this file.
Please note that all entries must end with `---` to allow for the auto release body to  use the Changelog



## [v0.0.1]

### Added
- Initial Commit/Release
---

답변1

여기서 볼 수 있는 두 가지 주요 문제는 다음과 같습니다.

  1. 닫혀 m/있고 /정규 표현식입니다.구분 기호– 정규식 자체의 일부로 포함되어서는 안 됩니다.

  2. grep기본값은 줄 지향이므로 실제로 여러 줄 일치를 수행하지 않습니다. 최소한 GNU grep에서는 널 바이트 구분을 사용하는 플래그를 추가하여 이를 하나로 묶을 수 있습니다 -z.

예를 들어,

$ grep -zPo '(?s)##\s\[v0.0.1].+?(?=---)' CHANGELOG.md
## [v0.0.1]

### Added
- Initial Commit/Release

여러 줄 일치의 경우 pcregrep플랫폼에 적합하다면 사용을 고려할 수 있습니다.

pcregrep -Mo '(?s)##\s\[v0.0.1].+?(?=---)' CHANGELOG.md

답변2

m//다음과 같이 구분 기호를 제거해야 합니다 .

grep -P '(?s)##\s\[v0.0.1].+?(?=---)' CHANAGELOG.md

하지만 적합하지 않음여러 줄모델기본적으로 regex101 스니펫과 같습니다.

그래서,구조하다:

perl -0 -lne 'print $& if m/(?s)##\s\[v0.0.1].+?(?=---)/' file

산출

## [v0.0.1]

### Added
- Initial Commit/Release

관련 정보