用别名替换文件中的文本

用别名替换文件中的文本

这是一个实际情况。我面对一些文件,这些文件中有一个通用字符串。我通常会打开 vi 并执行类似以下操作

:%s/text/replacement/g

我必须在许多文件中多次执行此操作。是否有一些简单的方法可以做到这一点或我可以为其创建某种别名?

答案1

您可以使用 find 查找目标文件,然后将其通过管道传输到 sed:

查找 | xargs sed -i 's/foo/bar/g'

仅在 .txt 文件中替换:

查找 . -name "*.txt" -print | xargs sed -i 's/foo/bar/g'

(从这篇博文

答案2

啊,是的,是时候来一个 perl 单行程序了。这个怎么样?

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

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

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

同时:::将此之后的所有内容用作输入文件

或者改变全部当前目录中的 txt 文件和以下

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

请注意,系统-i.bak会保存您更改的每个文件的备份,以防您犯错。如果您觉得危险,可以忽略此操作。

无论如何,sed答案显然是标准答案,但也有一些有趣的替代方法。此外,如果您有很多文件,gnu parallel 的速度会快得多,因为它会并行运行多个副本(正如人们所希望的那样,鉴于其名称)。

答案3

检查一下 sed,类似这样:

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

相关内容