Issue
Suppose I have a file called mytest.conf which looks like:
displayName: REPLACE_ONE
url: "https://REPLACE_TWO:8443"
The goal is to invoke a sed command and replace "REPLACE_ONE" with "one" and "REPLACE_TWO" with "two".
Desired output of mytest.conf is:
displayName: one
url: "https://two:8443"
When I run:
find . -type f -name "*.conf" -exec sed -i'' -e 's/REPLACE_TWO./two/g' {} +
mytest.conf gets modified to look like:
displayName: one
url: "https://two8443"
which is really close, but for some reason the colon ":" gets deleted.
When I run :
find . -type f -name "*.conf" -exec sed -i'' -e 's/REPLACE_ONE./one/g' {} +
nothing happens to mytest.conf (i.e. the REPLACE_ONE is still there!) and I'm not sure why.
Would appreciate it if someone in the community could help me debug my sed statements.
Solution
Take your dots out .. That is indicating one character AFTER your search string:
find . -type f -name "*.conf" -exec sed -i'' -e 's/REPLACE_ONE/one/g' {} +
find . -type f -name "*.conf" -exec sed -i'' -e 's/REPLACE_TWO/two/g' {} +
This can be simplified into a single line as well ..
find . -type f -name "*.conf" -exec sed -i'' -e 's/REPLACE_TWO/two/g;s/REPLACE_ONE/one/g' {} +
The reason that doesn't work for ONE
is that there is nothing after it but a newline
. So the search comes back false. Had you a space or a character after REPLACE_ONE
it would remove that character because of the dot.
The reason it removes the colon on TWO
is because the dot is signifying a character afterward, which is your colon.
Answered By - Zak Answer Checked By - Marie Seifert (WPSolving Admin)