Grep

替換文件中文本的別名

  • March 10, 2011

這是一個實際情況。我面臨一些文件,這些文件中有一個公共字元串。我通常會打開 vi 並做一些類似的事情

:%s/text/replacement/g

我必須在很多文件中多次這樣做。有沒有一些簡單的方法可以做到這一點,或者我可以為它創建某種別名?

您可以使用 find 查找目標文件,然後將其通過管道傳輸到 sed:

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

僅在 .txt 文件中替換:

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

(來自這篇博文

啊,是的,是時候使用 perl oneliner了。這個怎麼樣?

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

或者您想更改目前目錄中的所有 *.txt 文件?在這種情況下,如何將它與GNU parallel結合起來:

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 並行將顯著更快,因為它並行執行多個副本(正如人們所希望的那樣,給定名稱)。

引用自:https://serverfault.com/questions/245579