Awk替换字符串

时间:2016-09-01 15:06:51

标签: bash awk sed

注意: 这个问题看起来像previously posted one,但正如评论中所提到的那样,结果是chameleon question. 我接受了答案,我在这里发布了同样的问题,但是“解决条件”略有不同。

我有一个这样的文件test.txt(但包含更多行)

/foo/bar/how /SOME_TEXT_HERE/hello
/foo/bar/are hello/SOME_OTHER_TEXT
/foo/bar/you hello

我想得到这个输出:

/foo/bar/how /SOME_TEXT_HERE/how
/foo/bar/are are/SOME_OTHER_TEXT
/foo/bar/you you

我试过这个:

while read line
do
bla=$(echo $line | cut -f4 -d"/" | cut -f1 -d" ")
sed -i "s/hello/$bla/" test.txt
done <test.txt

但输出是:

/foo/bar/how /SOME_TEXT_HERE/how
/foo/bar/are how/SOME_OTHER_TEXT
/foo/bar/you how

注意

我想解决方案:

  1. 允许我定义一个变量(这里,bla),我将手动定义,从一个文件到另一个文件不同(所以不使用像基本字段位置那样的sthg),而是使用{{1或者在我的例子中的其他命令)

  2. 通过此变量替换行中其他位置的特定字符串(因此不是cut之类的字段位置,但实际上类似于$2

  3. 我不确定这是否可行(显然我不知道自己该如何做到这一点......),但感谢你的时间尝试! :)

1 个答案:

答案 0 :(得分:2)

awk '{sub(/are hello/,"are are")sub(/you hello/,"you you")}1' file

/foo/bar/how /SOME_TEXT_HERE/hello
/foo/bar/are are/SOME_OTHER_TEXT
/foo/bar/you you