修改工作正则表达式以使用 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
我有一个有效的正则表达式模式:
^\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