나는 마크다운 파일에서 일부 콘텐츠를 잘라내기 위해 다음 정규식을 사용해 왔습니다. 이는 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
여기서 볼 수 있는 두 가지 주요 문제는 다음과 같습니다.
닫혀
m/
있고/
정규 표현식입니다.구분 기호– 정규식 자체의 일부로 포함되어서는 안 됩니다.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