pcregrep 如何强制返回正则表达式的第一个匹配项



我有ci管道,有很多before_scripts部分。我想做一个多行正则表达式。我导出所有之前的脚本到my-ci-jobs.txt与python脚本。

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(
  • ]- 字符]文字(无需转义,因为字符类之外的]并不特殊(。

相关内容

  • 没有找到相关文章

最新更新