这里是一个实际的情况。我面对我的一些文件,这些文件中有一个共同的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