我需要從通訊組列表中的幾個文件中刪除大約40封電子郵件。 一個地址可能出現在不同的文件中,需要從所有文件中刪除。 我在一個目錄中有幾個.sh文件,它們也有幾行。AIX中的文件中的最佳字符串替換
我在一對夫婦的測試文件做了這樣的事情:
find . -type f -exec grep -li ADDRESS_TO_FIND {} 2>/dev/null \; | xargs sed -i 's/ADDRESS_TO_REMOVE/ /g' *
它工作正常,但一旦我嘗試在真正的文件,它需要很長的時間,只是坐在那裏。我需要在不同的服務器上運行這個,這是我想優化這個的主要原因。
我試圖運行是這樣的:
find . -type f -name '*sh' 2>/dev/null | xargs grep ADDRESS_TO_FIND
,但將返回:
./FileContainingAddress.sh:ADDRESS_TO_FIND
如何添加這樣的事情:
awk '{print substr($0,1,10)}'
但要回報我在「:
」之前的所有內容?
我可以做從那裏休息,但還沒有找到如何修剪一部分
使用 找到解決方法awk -F:'{print $ 1}' 最終的命令是: 查找。-type f -name'* 1'2>/dev/null | xargs grep ADDRESS | awk -F:'{print $ 1}'| xargs sed -i's/ADDRESS // g'* – 2014-09-10 20:52:04
是的,'awk -F:'{print $ 1}''會在冒號前面打印該部分,但是可以通過'-l'開關完全避免grep 。我認爲你的原創嘗試是符合正確道路的。應該刪除命令末尾的'* *,正如我在我的回答中提到的那樣。 – 2014-09-10 22:16:39