我正在尝试编写一个bash脚本来修改文件中某个字符串的所有匹配项。
我有一个包含大量文本的文件,其中包含网址。所有网址都采用以下格式:http://goo.gl/abc23
(即goo.gl/,后跟4或5个字母数字字符)。
我想做的是在所有网址上附加一个字符串。 http://goo.gl/abc23
将成为http://goo.gl/abc23?AString
,http://goo.gl/JB007
将成为http://goo.gl/JB007?AString
,依此类推。
我在过去的3个小时里一直在尝试这个并且无处可去。我确定这不是很难。
我尝试过使用sed(搜索和替换)和正则表达式,但我不知道如何将追加添加到字符串中,而不是替换它。我对bash或正则表达式不太满意。
任何人都可以帮助我吗?任何帮助将不胜感激。
答案 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