Issue
im trying to switch the no
part from the below text to yes
using this sed command but doesnt seem to figure it out. Any help would be greatly appreciated!
command: sed -E "s@<wodle name="docker-listener">\n\s+<disabled>(no)<\/disabled>@yes@g" /etc/test.txt
text in test.txt
<wodle name="docker-listener">
<disabled>no</disabled>
</wodle>
<wodle name="example">
<disabled>no</disabled>
</wodle>
UPDATE:
Im in a better shape now with the below command, but the problem is that even if sed does not find a match im still get a return code of 0
and not the defined 100
. Any clues how to fix this?
sed -E "N;!{q100};s@<wodle name=\"docker-listener\">\n\s+<disabled>no@<wodle name=\"docker-listener\">\n <disabled>yes@g"
Solution
sed 'H;1h;$!d;x;{/(<wodle name="docker-listener">\n[ ]*<disabled>)no(<\/disabled>)/!q100; s//\1yes\2/}' -E file; echo $?
0
sed 'H;1h;$!d;x;{/(<wodle name="docker-listener">\n[ ]*<disabled>)yes(<\/disabled>)/!q100; s//\1yes\2/}' -E file; echo $?
100
Since you insisted on matching \n and [[:space:]]; Storing entire file in buffer is only solution to match \n.
H;1h;$!d;x
--> Store entire file in pattern buffer
/<wodle name="docker-listener">\n[ ]*<disabled>yes<\/disabled>/
--> Match for pattern
!{q100}
--> sets exit code 100 if pattern not found else 0
s///
---> will do actual replace
Answered By - Haru Suzuki Answer Checked By - Gilberto Lyons (WPSolving Admin)