regexstringbash

How to append a string to all occurrences of another string in file


I'm trying to write a bash script that would modify all occurrences of a certain string in a file.

I have a file with a bunch of text, in which urls occur. All urls are in the following format: http://example.com/JB007 (that's example.com/, followed by 4 OR 5 alphanumeric characters).

What I'd like do is append a string to all urls. http://example.com/JB007 would become http://example.com/JB007?AString and so on.

I've been trying this for the past 3 hours and got nowhere. I'm sure it's not very hard.

I've tried with sed (search and replace) and regex, but I don't know how to just append to a string, NOT replace it. I'm not very good with bash or regex.

Can anyone help me? Any help would be greatly appreciated.


Solution

  • With sed, your methodology would be to "replace the current string with the current string plus another one." So, if you had some regex to match all of your URLs (since I don't want to write one on the fly):

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

    You'd have your entire regex in place of myregex. The & character puts the entire matched string on the right side, and the rest of the right-hand part of the substitution adds ?AString. The g at the end tells sed to substitute all instances on a line, rather than just the first.