如何使用AWK匹配文件中tag字段并输出其引号内的内容
问题原因
你原有的AWK命令存在两个核心问题:
- 字段分隔符设置错误:setup.py 中
tag与对应值是通过=连接,而非你设置的:,因此$1=="tag"的匹配条件永远无法命中 - 输出逻辑错误:就算匹配到行,原命令只输出第一个字段,无法拿到引号包裹的内容
调整后的方案
方案1:适配双引号包裹的场景(匹配你给出的示例输入)
awk '/^[[:space:]]*tag/ {split($0, arr, "\""); print arr[2]}' setup.py
逻辑说明:先匹配行首带任意空格的tag行,再用双引号作为分隔符拆分字符串,直接输出拆分后的第二个元素即可。
方案2:同时兼容单引号、双引号包裹的通用场景
awk 'match($0, /^[[:space:]]*tag[[:space:]]*=[[:space:]]*["'\'']([^"'\'']*)["'\'']/, arr) {print arr[1]}' setup.py
逻辑说明:通过match函数的正则捕获能力,先匹配tag变量的定义规则,再将单/双引号中间的非引号内容捕获到数组中,直接输出捕获结果即可。
两个方案运行你给出的示例输入,都会直接输出预期的0.0.8。
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

