Grep
替換文件中文本的別名
這是一個實際情況。我面臨一些文件,這些文件中有一個公共字元串。我通常會打開 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 並行將顯著更快,因為它並行執行多個副本(正如人們所希望的那樣,給定名稱)。