私はマークダウンファイルからいくつかのコンテンツを切り取るために次の正規表現を使用してきました。これは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
ここで見られる2つの主な問題は次のとおりです。
閉じ
m/
て/
正規表現です。区切り記号- 正規表現自体の一部として含めないでください。grep
デフォルトは行指向であるため、実際には複数行の一致を実行しません。少なくともGNU grepでは、ヌルバイト区切りを使用するフラグを追加することでこれを1つにまとめることができます-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