修改工作正则表达式以使用 g/awk

modifying working regex to work with g/awk

我有一个有效的正则表达式模式:

^\s+$\n^([ \t]+)Summary.*(?:\n[ \t]*\S.*)+

旨在匹配以单词 "Summary" 开头的整个段落,根据此

我现在正在寻求与 gawk 一起工作,例如

gawk '/^\s+$\n^([ \t]+)Summary.*(?:\n[ \t]*\S.*)+/{print}'

但是上面的语句没有返回任何内容。

作为替代方案,我可以使用

gawk /Summary/ myfile.txt

其中 returns 段落的单行包含单词 'Summary'。大概我可以使用 RS 变量来指定记录分隔符。

出于我的特殊目的,我的目标是捕获一个 多行 段落,该段落以单词 "Summary" 开头并以方括号中的内容结尾。我能够使用以下称为 范围模式 的 gawk 语句来精确复制有问题的正则表达式:

gawk /Summary/,/\]/{print}  myfile.txt

        ^       ^
range:start    end
    "Summary"  "]"

注意转义方括号。此语句匹配由(包括)Summary].

界定的所有内容

另请参阅此 question

虽然这不是问题的答案 - 修改在一个环境中工作的正则表达式以在 awk 中工作 - 它是解决问题的一种变通方法(特别是在没有任何其他输入的情况下)。

最好使用 below one 而不是范围表达式,您可以阅读 Ed Morton and Scrutinizer from here

讨论的范围表达式的更多信息
awk '/Summary/{f=1} f{print; if (/RefSeq/) f=0}' yourfile.txt