笔记:
这个问题看起来像一个之前发过一篇 https://stackoverflow.com/questions/39273660/awk-sed-replace-in-each-line-with-previous-string-in-the-line/39273912#39273912,但正如评论中提到的,结果是变色龙问题。 https://meta.stackexchange.com/questions/43478/exit-strategies-for-chameleon-questions我接受了答案,并且我在这里发布了相同的问题,但“解决方案条件”略有不同。
我有一个文件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
NOTE:
我想要的解决方案是:
让我定义一个变量(这里,bla
),我将手动定义一个文件与另一个文件的不同(因此不使用基本字段位置之类的东西),而是使用cut
或我的示例中的其他命令)
用此变量替换行中其他位置的特定字符串(因此不是像这样的字段位置$2
,但确实像s/hello/$bla
)
我不确定这是否可能(显然我不知道如何自己做到这一点......),但感谢您花时间尝试! :)
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)