如何强制返回regexp的第一个匹配
我有ci管道,在脚本之前有很多如何强制返回regexp的第一个匹配,regex,bash,pcregrep,Regex,Bash,Pcregrep,我有ci管道,在脚本之前有很多部分。我想做一个多行regexp。我使用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":
部分。我想做一个多行regexp。我使用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脚本中有更多的行,所以我想做一个常规脚本,它捕获before_脚本和第一个匹配的,
之间的所有内容。但当我实现它时,它将赶上最长的比赛。这是我的命令(我不会在这里显示结果,直到最后一个],
,它是整个文件):
如何使regexp与第一个匹配项匹配?有没有更好的方法来执行多行regexp?在正则表达式中几乎不需要(.|\n)
,有更好的方法来匹配任何字符,包括换行符
要匹配任何零个或多个字符,但]
可以使用[^]*
模式:
pcregrep -M 'before_script[^]]*]' file
如果只需要第一个匹配项,请添加| head-1
:
pcregrep -M 'before_script[^]]*]' file | head -1
图案细节
在脚本之前
-一些文字
[^]]*
-一个反括号表达式,匹配除]
字符以外的任何字符,尽可能多地匹配0次或更多次(因为*
是一个贪婪的量词)(它也匹配换行字符,因为您将-M
选项传递给pcregremp
)
]
-文字]
字符(无需转义,因为字符类之外的]
并不特殊)
感谢您的重播。这是行不通的。它什么也不返回。有用吗?我编辑了正则表达式。如果您提供上述输入的预期结果,这将有所帮助。也许你可以创建一个文件的小样本并粘贴。这很有效,谢谢。你能解释一下reqexp并回答我的问题吗?我想你只需要在脚本[^]]*]文件
之前使用pcregrep-M'。如果您只需要第一次匹配,请添加|head-1
我需要在脚本之前的的第一次匹配,
但基本上我需要在脚本之前的所有,
,然后检查差异。你的第一个要求完全符合我的要求。
pcregrep -M 'before_script[^]]*]' file | head -1