如何将字符串附加到文件中所有出现的另一个字符串

时间:2012-02-09 12:41:40

标签: regex string bash

我正在尝试编写一个bash脚本来修改文件中某个字符串的所有匹配项。

我有一个包含大量文本的文件,其中包含网址。所有网址都采用以下格式:http://goo.gl/abc23(即goo.gl/,后跟4或5个字母数字字符)。

我想做的是在所有网址上附加一个字符串。 http://goo.gl/abc23将成为http://goo.gl/abc23?AStringhttp://goo.gl/JB007将成为http://goo.gl/JB007?AString,依此类推。

我在过去的3个小时里一直在尝试这个并且无处可去。我确定这不是很难。

我尝试过使用sed(搜索和替换)和正则表达式,但我不知道如何将追加添加到字符串中,而不是替换它。我对bash或正则表达式不太满意。

任何人都可以帮助我吗?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

使用sed,您的方法是“用当前字符串和另一个字符串替换当前字符串。”所以,如果你有一些正则表达式匹配所有的URL(因为我不想动态写一个):

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

你将整个正则表达式代替myregex&字符将整个匹配的字符串放在右侧,替换的右侧部分的其余部分添加?AString。最后的g告诉sed替换一行上的所有实例,而不是第一行。

答案 1 :(得分:0)

一种perl方式,假设URL以空格结尾:

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

答案 2 :(得分:0)

您可以使用sed替换字符串结尾($):

sed 's/$/?AString/' input.txt