如何更换使用awk / SED字符串的第二个实例 [英] How to replace the second instance of a string with awk/sed

查看:106
本文介绍了如何更换使用awk / SED字符串的第二个实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图替换字符串FooBarr的第二个实例与在变量$ myVar的值的文件。 AWK似乎并不解析变量。有谁知道我在做什么错在这里取悦或有正向更好的办法吗?

 的awk'/ FooBarr / {C ++;如果(C == 2){子(FooBarr,$ myVar的); C = 0}} 1'MYFILE


解决方案

您需要使用 -v VAR =值语法值传递给awk和使用这个逻辑略有不同:

 的awk -v myVar的=$ myVar的'/ FooBarr / {C ++}℃== 2 {子(FooBarrmyVar的); C = 0} 1'MYFILE

或者更好的传递,在命令行搜索词,以及:

 的awk -v S ='FooBarr'-v myVar的=$ myVar的'$ 0〜Š{C ++}℃== {2分(S,myVar的); C = 0} 1'MYFILE

I am trying to replace the second instance of the string FooBarr in a file with the value in the variable $myVar. AWK doesn't seem to parse the variable. Does anyone know what I'm doing wrong here please or have a better way forward please?

awk '/FooBarr /{c++;if(c==2){sub("FooBarr ",$myVar);c=0}}1' myFile

解决方案

You need to use -v var=value syntax to pass the value to awk and use this logic little differently:

awk -v myVar="$myVar" '/FooBarr /{c++} c==2{sub("FooBarr ", myVar); c=0} 1' myFile

Or better to pass-in search term from command line as well:

awk -v s='FooBarr ' -v myVar="$myVar" '$0~s{c++} c==2{sub(s, myVar); c=0} 1' myFile

这篇关于如何更换使用awk / SED字符串的第二个实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆