2012-02-09 85 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 
相关问题