AWK 在文件中的字符串匹配后打印

qwe*_*rty 4 macos awk

我写了一个 awk 命令:

awk -F: '$1=="tag" {print $1;}' setup.py
Run Code Online (Sandbox Code Playgroud)

我想打印引号中的标记后的所有内容。

输入示例:

import tools

tools.setup(
    name='test',
    tag="0.0.8",
    packages=tools.ges(),
    line xyz
)
Run Code Online (Sandbox Code Playgroud)

输出: 0.0.8

我试图输出标签后的所有内容,但我什至无法让它工作。

Rav*_*h13 5

第一个解决方案:根据您显示的示例,请尝试以下awk程序。使用match的 函数awk来匹配正则表达式tag="[^"]*,它将匹配从 tag=' 到下一次出现 ' 之前的所有内容。打印时仅打印匹配部分的子字符串并删除不需要的部分以仅获取版本部分。

awk 'match($0,/tag="[^"]*/){print substr($0,RSTART+5,RLENGTH-5)}' Input_file
Run Code Online (Sandbox Code Playgroud)

第二个解决方案:使用 GNUgrep请尝试以下操作。在 GNU 中使用oP选项grep,其中P选项负责启用 PCRE 正则表达式。在主程序中匹配 tag=" 然后使用\K选项忘记匹配的值并在下一次出现之前匹配"将打印匹配的值。

grep -oP 'tag="\K[^"]*' Input_file
Run Code Online (Sandbox Code Playgroud)

第三种解决方案:使用 GNUsed请尝试以下解决方案。使用-E的选项sed将在程序中启用 ERE(扩展正则表达式)。使用-n选项停止打印行,直到我们明确提到打印。在主程序中,替换匹配值,该值是标签之前的所有内容,并在此处创建第一个也是唯一的反向引用,其中包含"..."两个双引号之间的所有内容,并且在执行替换时仅用支持的参考值替换它并使用p打印匹配值的选项。

sed -E -n 's/.*tag="([^"]*).*/\1/p' Input_file
Run Code Online (Sandbox Code Playgroud)