我一直在使用以下正则表达式从 markdown 文件中剪切一些内容,这在 regex101 中效果很好,但似乎无法让 grep 来使用它。
要么出错,要么不返回任何内容
正则表达式在这里:https://regex101.com/r/XDImM9/1
或者(?s)##\s\[v0.0.1].+?(?=---)
我尝试过使用 grep 和 -P 标志,它应该支持 PCRE 风格的正则表达式,但似乎没有做太多事情
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/
and/
是正则表达式分隔符– 它们不应作为正则表达式本身的一部分包含在内。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