将文本变量替换为awk语句

时间:2017-04-21 20:56:18

标签: bash awk

如何获取以下awk脚本以传递whoami的用户名结果以存储在变量中,然后调用以使用awk搜索该文本。我似乎能够传递$ myCount而不是$ myUser

myUser=$(whoami)
myCount=6
awk -v count=$myCount -v Bob=$myUser '/"tg-6k2t".*Bob/{x=count}x--==1{sub(/tg-6k2t/,"tg-b5xm")}1' file

1 个答案:

答案 0 :(得分:2)

传递值不是你的问题,尝试在常量正则表达式中引用它。在命令行列表中设置-v user="$myUser",就像设置count并更改:

一样
/"tg-6k2t".*Bob/

为:

$0 ~ ("\"tg-6k2t\".*" user)

parens并非绝对必要,只是为了提高可读性。您需要添加$0 ~,因为条件上下文中的regexp文字/foo/$0 ~ /foo/的简写,但条件上下文中的"foo"只是一个测试,看看是否一个字符串不是null,你需要明确$0 ~ "foo"使它成为$ 0与动态正则表达式的正则表达式比较。

您可能需要考虑将整个脚本参数化:

awk -v count="$myCount" -v user="$myUser" -v old='tg-6k2t' -v new='tg-b5xm' '
    $0 ~ ("\"" old "\".*" user){x=count} x--==1{sub(old,new)} 1
' file