【问题标题】:I want to search a word from a file and replace it with another value in file我想从文件中搜索一个单词并将其替换为文件中的另一个值
【发布时间】:2013-11-13 12:10:00
【问题描述】:

我想从文件中搜索一个词,而不是代表该搜索我想替换该文件中的一个词。 下面是文件中需要搜索和替换的内容(这是.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

【问题讨论】:

  • unix 必须在行首吗?
  • 我猜它不会对阿布产生任何影响
  • 这很重要,因为如果我知道目标单词的位置,它可以简化将替换它的正则表达式。

标签: linux shell sed grep


【解决方案1】:

但我希望 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

【讨论】:

  • 我希望 sed 在从文件中搜索特定行后执行,所以我试图通过 grep 进行搜索。当搜索该行时,sed 应该只替换文件中该行的匹配词。
  • @abhinavdixit 查看编辑。如果您提及所需的输出会有所帮助。
  • 但动机不是制作新文件。另外,如果我按照您上面提到的方式重定向到一个新文件,那么新文件将只包含 1 行,但我希望替换应该在同一个文件上完成。
  • @abhinavdixit 您能否将所需的输出添加到您的问题中?
  • 我在我的问题中进行了编辑,我刚刚提到了我想要的示例输出。
【解决方案2】:
perl -pi -e 's/crap/linux if(/\bunix\b/)' your_file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多