[英]Shell script to find and replace a string
您好,我的一位同事是程序代碼開發人員,並且在120個不同文件中具有相同的smtp服務器名稱,現在我必須將其更改為其他名稱。 但是一個接一個地做是不可能的。 我正在使用“ grep”在該目錄中的所有文件中遞歸搜索字符串。 但是我不確定grep是否可以編輯文件並將其替換為新字符串。
謝謝
這不應該在serverfault上嗎?
無論如何,您應該將find
和sed
結合使用。
可能是這樣的:
find . -iname "<filepattern>" -exec sed -e "s/<regex to look for>/<replacement>/g" -i {} \;
使用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
。)
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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.