如何用awk/sed提取URL值填充name字段并给指定行加前缀
实现方案
你可以用awk一次性完成两个需求,不需要拆分多次处理,脚本如下:
awk ' BEGIN { valid = "url:|name:|organisation:" } /^url:/ { url_val = substr($0, 5) print next } /^name:/ { print "name: " url_val next } { print $0 ~ "^(" valid ")" ? $0 : "pass:"$0 } ' 目标文件路径
效果验证
针对你给出的示例输入:
url: urlvalue name: organisation: word
执行后输出结果完全符合预期:
url: urlvalue name: urlvalue organisation: pass:word
逻辑说明
- 首先匹配
url:开头的行,提取冒号后的value存储到变量,输出原行后跳过后续判断 - 匹配原有空的
name:行时,直接输出填充了urlvalue的行,替换原有空值行 - 其余行判断是否属于指定前缀的合规行,合规直接输出,不合规自动加
pass:前缀
如果需要直接修改原文件,可执行如下命令:
# 用GNU awk直接修改原文件 awk -i inplace '上述脚本逻辑' 目标文件路径 # 兼容所有版本awk的修改方式 awk '上述脚本逻辑' 目标文件路径 > tmp && mv tmp 目标文件路径
内容的提问来源于stack exchange,提问作者kung
相关产品推荐
相关产品推荐

