pcregrep 如何强制 return 正则表达式的第一场比赛
How pcregrep force to return first match of regexp
我有 ci 管道并且有很多 before_scripts
部分。我想制作一个多行正则表达式。我使用 python 脚本将所有脚本导出到 my-ci-jobs.txt
。
pcregrep -M 'before_script.*\n.*' my-ci-jobs.txt
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
这工作正常,但有时,在脚本之前有更多的行,所以我想做一个正则来捕获 before_script 和 ],
的第一个匹配之间的所有内容。但是当我实现它时,它会捕捉到最长的匹配。这是我的命令(我不会在这里传递结果,它是整个文件直到最后 ],
):
pcregrep -M 'before_script.*(\n|.)*],' my-ci-jobs.txt
如何使正则表达式匹配第一个匹配项?有没有更好的方法来做多行正则表达式?
你几乎不需要在正则表达式中使用 (.|\n)
,有更好的方法来匹配任何字符,包括换行符。
要匹配任何零个或多个字符但 ]
您可以使用 [^]]*
模式:
pcregrep -M 'before_script[^]]*]' file
如果您只需要第一个匹配项,请添加 | head -1
:
pcregrep -M 'before_script[^]]*]' file | head -1
图案详情
before_script
- 一些文字
[^]]*
- 一个否定的括号表达式,它匹配除 ]
字符之外的任何字符,0 次或更多次,尽可能多(因为 *
是一个贪婪的量词)(它也匹配换行符,因为您将 -M
选项传递给 pcregrep
)
]
- 文字 ]
字符(不需要转义它,因为字符 class 之外的 ]
并不特殊)。
我有 ci 管道并且有很多 before_scripts
部分。我想制作一个多行正则表达式。我使用 python 脚本将所有脚本导出到 my-ci-jobs.txt
。
pcregrep -M 'before_script.*\n.*' my-ci-jobs.txt
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
"before_script": [
"yarn install"
这工作正常,但有时,在脚本之前有更多的行,所以我想做一个正则来捕获 before_script 和 ],
的第一个匹配之间的所有内容。但是当我实现它时,它会捕捉到最长的匹配。这是我的命令(我不会在这里传递结果,它是整个文件直到最后 ],
):
pcregrep -M 'before_script.*(\n|.)*],' my-ci-jobs.txt
如何使正则表达式匹配第一个匹配项?有没有更好的方法来做多行正则表达式?
你几乎不需要在正则表达式中使用 (.|\n)
,有更好的方法来匹配任何字符,包括换行符。
要匹配任何零个或多个字符但 ]
您可以使用 [^]]*
模式:
pcregrep -M 'before_script[^]]*]' file
如果您只需要第一个匹配项,请添加 | head -1
:
pcregrep -M 'before_script[^]]*]' file | head -1
图案详情
before_script
- 一些文字[^]]*
- 一个否定的括号表达式,它匹配除]
字符之外的任何字符,0 次或更多次,尽可能多(因为*
是一个贪婪的量词)(它也匹配换行符,因为您将-M
选项传递给pcregrep
)]
- 文字]
字符(不需要转义它,因为字符 class 之外的]
并不特殊)。