别名replace文件中的文本

这里是一个实际的情况。我面对我的一些文件,这些文件中有一个共同的string。我通常会打开vi,做一些像

:%s/text/replacement/g 

而且我必须在许多文件中多次执行它。 有没有一些简单的方法来做到这一点,或者我可以创build一些别名

您可以使用find来查找目标文件,然后将其pipe理到sed:

find| xargs sed -i's / foo / bar / g'

只能replace.txt文件:

找 。 -name“* .txt”-print | xargs sed -i's / foo / bar / g'

(从这个博客文章 )

啊,是的,一个perl的上线时间。 这个怎么样?

 perl -pi -e 's/old text/new text/' file 

或者你想改变当前目录中的所有* .txt文件? 在这种情况下,如何将它与GNU并行相结合:

 parallel perl -i.bak -pe 's/foo/bar/' ::: *.txt 

与并行, :::表示在这之后使用eveything作为input文件

或者,更改当前目录和下面的 所有 txt文件:

 find . -name \*txt -print0 | parallel -q -0 perl -i.bak -pe 's/old text/new text/' 

请注意, -i.bak保存您更改的每个文件的备份副本,以防出错。 如果你觉得危险,你可以不要这样做。

无论如何, sed答案显然是标准的,但也有一些有趣的替代方法来做到这一点。 另外,如果你有很多的文件gnu并行会更快,因为它并行运行多个副本(正如人们所希望的那样)。

看看sed,像这样:

 sed -i 's/text/replacement/g' file