2012-02-09 75 views
2

我試圖寫一個bash腳本,將修改某些字符串中出現的所有的文件。如何將一個字符串追加到另一個字符串中出現的所有文件

我有一堆文字,其中的URL發生的文件。所有網址格式如下:http://goo.gl/abc23(即goo.gl/,後跟4或5個字母數字字符)。

我想要做的是一個字符串追加到所有的URL。 http://goo.gl/abc23會變成http://goo.gl/abc23?AString,http://goo.gl/JB007會變成http://goo.gl/JB007?AString等等。

我一直想這個在過去的3小時,毫無進展。我相信這不是很難。

我試過用SED(搜索和替換)和正則表達式,但我不知道如何做到這追加爲一個字符串,而不是取代它。我用bash或正則表達式不太好。

任何人都可以幫助我嗎?任何幫助將不勝感激。

+0

是否有某種分隔符後的URL? – Toto 2012-02-09 12:45:38

回答

2

隨着sed,你的方法,將「替換當前字符串與當前的字符串加上一個又一個。」所以,如果你有一些正則表達式匹配所有的網址(因爲我不想寫一個上飛):

sed 's/myregex/&?AString/g' myfile.txt 

你不得不代替myregex整個正則表達式。 &字符將整個匹配的字符串放在右側,替換的右側的其餘部分添加?AString。末尾的g指示sed替換一行中的所有實例,而不是第一個。

+0

真棒,它的作品。我不知道&。我一直試圖用$和$ 1等。 – zigamilek 2012-02-09 13:31:54

+0

現在有沒有辦法爲每個事件添加一個不同的字符串?比方說,我有一個'generatetring'函數,每次回顯一個不同的字符串。如果我用'sed「s/http:\/\/goo.gl \ /...../&?$(generatedtring)/ g」'調用它,它(預計)每次都會寫入相同的字符串。任何想法如何我可以在每次後寫一個不同的字符串? – zigamilek 2012-02-09 13:37:41

+0

@ user1199569如果字符串不是從你追加的字符串(即一個子集或其他東西)派生出來的,我不知道你沒有一堆'sed'命令會怎麼做。如果是這樣的話,'perl'可能是要走的路。話雖如此,捅了它一下,如果你無法弄清楚,就單獨提問吧! ;) – 2012-02-09 13:54:32

0

一個Perl的方式來做到這一點,假設網址,以空格結尾:

perl -pne 's#(http://\S+)#$1?AString#g' input_file 
+0

with perl,如果使用'$&'而不是'$ 1',則不需要捕獲圓括號 – 2012-02-09 14:25:28

0

您可以使用sed替換字符串的結尾($):

sed 's/$/?AString/' input.txt 
相關問題