2016-11-12 48 views
0

我有10,000個文本文件,我必須進行更改。從多個文件的第一行替換字符串

每個文件的第一行包含一個url。

搞錯了幾個文件的URL,如果它丟失

eg: 
    1) http://www.supersonic.com/psychology 
    2) http://www.supersonic.com/social 
    3) http://www.supersonic.com/science 

missking「COM」

eg: 
1) http://www.supersonic./psychology 
2) http://www.supersonic./social 
3) http://www.supersonic.com/science 

我的任務是檢查和添加「COM」的所有URL相同的域(超音速.com)

你能告訴我任何快速簡便的方法嗎?

嘗試這樣做:用supersonic.com

sed -e '1s/supersonic.//supersonic.com/' * 

在輸出沒有變化更換supersonic./

回答

1

您與您的代碼非常接近,但您需要在. char之後考慮尾隨/ char。

假設你使用的是最新sed-i(就地編輯)選項,你可以做

sed -i '[email protected]\./@supersonic.com/@' * 

注意,而不是要逃避/s/srchpat\/withSlash/replaceStr/'的裏面,你可以使用另一個字符後以s命令作爲分隔符,這裏我使用[email protected]@[email protected]。如果您的搜索模式有一個@字符,那麼您將不得不使用不同的字符。

有些老版本的sed需要你在第一次使用逃脫其它分隔,所以

 sed 's\@[email protected]@' file 

對於這些情況。

如果您使用的sed不支持-i選項,那麼您需要在文件上循環並管理tmp文件,即

for f in *.html ; do 
    sed '[email protected]\./@supersonic.com/@' "$f" > /tmp/"$f".fix \ 
    && /bin/mv /tmp/"$f".fix "$f" 
done 

警告

但正如你說的大約10,000 +文件,你會想要使用這兩種解決方案之前做一些測試。將一組隨機的文件複製到/ tmp/mySedTest/dir,然後運行其中一個解決方案,以確保沒有任何意外。

而且,您可能會用10,000個文件吹出cmd行MAX_SIZE,因此請閱讀find和xargs。這裏有很多關於[sed] find xargs的帖子。如果需要檢查出來。

IHTH

2
  1. 使用-i更改文件,而不是僅輸出更改的行。

  2. 如果要在正則表達式中使用/(或在正則表達式中使用\/),請使用與/不同的分隔符。

  3. 使用\.來匹配一個字面,.匹配任何東西。

    sed -i~ -e '1s=supersonic\./=supersonic.com/=' * 
    

sed一些版本不支持-i

相關問題