2010-09-03 104 views
1

你好,我有一個我的同事誰是程序代碼開發人員,並有120個不同的文件坐在同一個smtp服務器名稱,現在我必須改變他們到別的東西。但是一個接一個地做是不可能的。我使用「grep」遞歸搜索位於該目錄中的所有文件中的字符串。但我不確定grep是否可以編輯該文件並將其替換爲新字符串。shell腳本查找和替換字符串

感謝

回答

4

不應該這是對serverfault?

無論如何,你應該看看findsed的組合。

可能是這樣的:

find . -iname "<filepattern>" -exec sed -e "s/<regex to look for>/<replacement>/g" -i {} \; 
1
find /directory -type f -exec sed -i 's/oldname/newname/g' {} + 

遞歸搜索通過/directory並使用sed做搜索和替換。 {}被找到的文件名取代。

0

也許這樣的事?

find /path/to/start/from/ -type f | xargs perl -pi -e 's/textToFind/TextToReplace/g'

2

使用sed

grep -rl smtp1.example.com . | xargs sed -i 's/smtp1.example.com/smtp2.example.com/g' 

這意味着找到所有包含smtp1.example.com;的文件;輸出他們的名字;將每個文件名傳遞給sed命令,該命令在每個文件上進行搜索和替換。

grep將只列出實際包含文本的文件;這最大限度地減少了調用sed的文件數量。 (使用find -type f結果sed在任何文件上被調用。)