replace a unknown string between two known strings with sed

bash, regex, sed

Solution

sed -i 's/WORD1.*WORD3/WORD1 foo WORD3/g' file.txt

or

sed -i 's/(WORD1).*(WORD3)/\1 foo \2/g' file.txt

You might need to escape round brackets, depends on your sed variant.

Problem

I have a file with the following contents: `WORD1 WORD2 WORD3` How can I use sed to replace the string between WORD1 and WORD3 with `foo`, such that the contents of the file are changed to the following?: `WORD1 foo WORD3` I tried the following, but obviously I'm missing something because that does not produce the desired results: `sed -i '' 's/WORD1.*WORD3/foo/g' file.txt`

Original source