你好,我有一個我的同事誰是程序代碼開發人員,並有120個不同的文件坐在同一個smtp服務器名稱,現在我必須改變他們到別的東西。但是一個接一個地做是不可能的。我使用「grep」遞歸搜索位於該目錄中的所有文件中的字符串。但我不確定grep是否可以編輯該文件並將其替換爲新字符串。shell腳本查找和替換字符串
感謝
你好,我有一個我的同事誰是程序代碼開發人員,並有120個不同的文件坐在同一個smtp服務器名稱,現在我必須改變他們到別的東西。但是一個接一個地做是不可能的。我使用「grep」遞歸搜索位於該目錄中的所有文件中的字符串。但我不確定grep是否可以編輯該文件並將其替換爲新字符串。shell腳本查找和替換字符串
感謝
不應該這是對serverfault?
無論如何,你應該看看find
和sed
的組合。
可能是這樣的:
find . -iname "<filepattern>" -exec sed -e "s/<regex to look for>/<replacement>/g" -i {} \;
find /directory -type f -exec sed -i 's/oldname/newname/g' {} +
遞歸搜索通過/directory
並使用sed
做搜索和替換。 {}
被找到的文件名取代。
也許這樣的事?
find /path/to/start/from/ -type f | xargs perl -pi -e 's/textToFind/TextToReplace/g'
使用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
在任何文件上被調用。)