2012-08-10 56 views
12

我有大約100個包含純文本的.txt文件。不知何故,一些數據已被破壞,需要找到/替換。我可以從終端快速搜索/替換多個.txt文件嗎?

我需要搜索字符' - '並用長破折號代替:' - '。

有沒有辦法用終端中的命令快速執行此操作?

在我的目錄中的.txt文件的名稱按順序編號:的1.txt,2.txt等

謝謝!

+0

可能的[複製](http://stackoverflow.com/q/ 8384809/148680) – chb 2012-08-10 03:52:05

+0

Komodo Edit(http://www.activestate.com/komodo-edit)具有「查找/替換文件」功能。它是Mac,Windows和Linux的免費編輯器。 – jsherk 2013-04-04 20:38:29

回答

34

GNU sed

sed -i 's/--/—/g' *.txt 

OSX BSD sed

您需要指定備份文件擴展名。要創建具有擴展名的備份文件:.txt.bak

sed -i '.bak' 's/--/—/g' *.txt 

完全取代文件,指定一個空的擴展名:

sed -i '' 's/--/—/g' *.txt 
+0

這樣做!謝謝你一堆 – Lizza 2012-08-10 04:13:06

+0

@Casper:很高興我能幫忙:-) – Steve 2012-08-10 04:13:49

+0

標題「On OSX」有什麼意義?第一個例子不適用於OS X嗎? [閱讀@ aid的答案]哦。你能說一下第一個例子,爲什麼它不同,在哪個平臺上有所不同?另外,是OS X特有的第二個例子,還是它適用於BSD? – 2012-08-11 00:34:52

3

sed -i 's/--/–/g' *.txt應該工作。 -i標誌爲sed使其對原地文件起作用,s代表替換,g使它替換同一行上多次出現的模式。請查閱sed的文檔以獲取更多信息。

編輯:這適用於GNU/Linux;事實證明,OSX的語法略有不同(請參閱註釋和接受的答案)。

+0

所以我很新的命令行...我只是把你的命令到目錄中的文件與終端,並得到這個:sed:1:「base1.txt」:undefined label'ase1.txt'。有什麼想法嗎?謝謝! – Lizza 2012-08-10 03:52:58

+0

我剛剛意識到這些文件實際上並沒有按照我在原始問題中描述的方式命名。他們被命名爲base1.txt,base2.txt等。這是如何改變的? – Lizza 2012-08-10 03:54:01

+0

@Casper:它沒有。 '* .txt'讀取當前工作目錄中的每個'.txt'文件 – Steve 2012-08-10 03:58:20