我想从文件中搜索一个单词,并将其替换为文件中的另一个值

时间:2013-11-13 12:10:01

标签: linux shell sed grep

我想从文件中搜索一个单词,而不是代表该搜索,我想替换该文件中的单词。 下面是搜索和替换必须完成的文件中的内容(这是.csv文件)让文件名为test.csv - :

A,B,C,D,E
unix,123,crap,as,d
dpk,123,crap,as,d
shy,123,crap,as,d
ghn,123,crap,as,d
unnix,123,crap,as,d

以下是我正在使用的命令 - :

grep -rl 'unix' test.csv | xargs sed -i 's/crap/linux/1'

此命令的输出 - :

A,B,C,D,E
unix,123,linux,as,d
dpk,123,linux,as,d
shy,123,linux,as,d
ghn,123,linux,as,d
unnix,123,linux,as,d

但是我希望sed应该从包含unix而不是整个文件的行中替换单词crap。请帮助解决这个问题。 或者我还有其他方法可以做到这一点。 输出我想要的 - :

A,B,C,D,E
unix,123,linux,as,d
dpk,123,crap,as,d
shy,123,crap,as,d
ghn,123,crap,as,d
unnix,123,crap,as,d

2 个答案:

答案 0 :(得分:0)

  

但我希望sed应该从行中替换单词crap   包含unix而不是整个文件

你可以说:

sed -i '/unix/s/crap/linux/' test.csv

编辑:

如果您只想在grep生成的过滤输出中执行替换,您可以说:

grep 'unix' test.csv | sed 's/crap/linux/'

为了将输出保存到文件,请添加重定向:

grep 'unix' test.csv | sed 's/crap/linux/' > new.csv

答案 1 :(得分:0)

perl -pi -e 's/crap/linux if(/\bunix\b/)' your_file