I have two files: masterlist.txt that has hundreds of lines of URLs, and toupdate.txt that has a smaller number of updated versions of lines from the masterlist.txt file that need to be replaced.
I'd like to be able to automate this process using Bash, since the creation and utilisation of these lists is already occuring in a bash script.
The server part of the URL is the part that changes, so we could match using the unique part: /whatever/whatever_user.xml, but how to find and replace those lines in masterlist.txt? i.e. how to go through each line of toupdate.txt and as it ends in /f_SomeName/f_SomeName_user.xml, find that ending in masterlist.txt and replace that whole line with the new one?
So https://123456url.domain.com/26/path/f_SomeName/f_SomeName_user.xml becomes https://new-123.domain.com/1/path/f_SomeName/f_SomeName_user.xml for example.
The rest of masterlist.txt needs to stay intact, so we must only find and replace lines that have different servers for the same line endings (IDs).
Structure
masterlist.txt looks like this:
https://123456url.domain.com/26/path/f_SomeName/f_SomeName_user.xml
https://456789url.domain.com/32/path/f_AnotherName/f_AnotherName_user.xml
https://101112url.domain.com/1/path/g_SomethingElse/g_SomethingElse_user.xml
https://222blah11.domain.com/19/path/e_BlahBlah/e_BlahBlah_user.xml
[...]
toupdate.txt looks like this:
https://new-123.domain.com/1/path/f_SomeName/f_SomeName_user.xml
https://foo-254.domain.com/8/path/g_SomethingElse/g_SomethingElse_user.xml
Desired Result
Make masterlist.txt look like:
https://new-123.domain.com/1/path/f_SomeName/f_SomeName_user.xml
https://456789url.domain.com/32/path/f_AnotherName/f_AnotherName_user.xml
https://foo-254.domain.com/8/path/g_SomethingElse/g_SomethingElse_user.xml
https://222blah11.domain.com/19/path/e_BlahBlah/e_BlahBlah_user.xml
[...]
Initial workup
I've looked at sed but I don't know how to do the find and replace using lines from the two files?
Here's what I have so far, doing the file handling at least:
#!/bin/bash
#...
while read -r line; do
    # there's a new link on each line
    link="${line}"
    # extract the unique part from the end of each line
    grabXML="${link##*/}"
    grabID="${grabXML%_user.xml}"
    # if we cannot grab the ID, then just set it to use the full link so we don't have an empty string
    if [ -n "${grabID}" ]; then
        identifier=${grabID}
    else
        identifier="${line}"
    fi
    
    ## the find and replace here? ##    
# we're done when we've reached the end of the file
done < "masterlist.txt"
 
     
    