如何在Bash中给变量赋值带引号字符串并在Awk中用作匹配模式?
解决Awk匹配范围起始行的问题
你的问题出在原命令的匹配条件太宽泛,只要行里包含shubham就会触发起始匹配,所以target(shubham)也被纳入范围了。要限定只匹配**被单引号包裹的shubham**所在的行,只需修改Awk的匹配模式:
修改后的命令
objects=shubham awk -v myvar="$objects" '$0~"'"'"myvar"'"'" ,/REPLACE/' a.txt
或者更清晰的转义写法:
objects=shubham awk -v myvar="$objects" '$0~"\047"myvar"\047",/REPLACE/' a.txt
验证输出
执行后会得到你期望的结果:
hello('shubham') abc bcd REPLACE
原理说明
"\047"是Awk中单引号的转义写法(对应ASCII码47),用它拼接变量后,就能精准匹配带单引号包裹的shubham- 修改后的匹配条件只会在包含
'shubham'的行触发起始匹配,自然跳过target(shubham)这类不带引号的行
内容的提问来源于stack exchange,提问作者Shubham Gurao
相关产品推荐
相关产品推荐

