Linux 我想从文件中搜索一个单词,并用文件中的另一个值替换它

Linux 我想从文件中搜索一个单词,并用文件中的另一个值替换它,linux,shell,sed,grep,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

我想从文件中搜索一个单词,而不是代表该搜索替换该文件中的一个单词。 下面是必须进行搜索和替换的文件中的内容(这是.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,而不是整个文件中的单词。请在这方面给予帮助。 或者我知道还有别的办法。 输出I所需-:

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
但是我希望sed应该替换掉 包含
unix
而不是整个文件

你可以说:

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

编辑:

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

sed -i '/unix/s/crap/linux/' test.csv
grep 'unix' test.csv | sed 's/crap/linux/'
要将输出保存到文件,请添加重定向:

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

我希望sed在从文件中搜索特定行后执行,因此我尝试使用grep进行搜索。搜索该行时,sed应仅替换该行文件中匹配的单词。@abhinavdixit请参见编辑。如果你提到想要的输出会有帮助,但动机不是制作新文件。另外,如果我按照您上面提到的方式重定向到一个新文件,那么新文件将只包含1行,但我希望替换应该在同一个文件上完成。@abhinavdixit您可以将所需的输出添加到您的问题中吗?我在我的问题中进行了编辑,我刚才提到了我所需的示例输出。
unix
必须在其中吗行的开头?它不会产生任何影响,我想这有点重要,因为如果我知道目标单词的位置,它可以简化将取代它的正则表达式。