Issue
I'd like to replace several string in a file having a 'false' value with a 'true' value with a single 'sed' command.
My problem is that in the middle of the string there is a dynamic part like one,two,three,[..] that I want to maintain in the replacement.
For example, this is the content of MyFile.txt
:
payinstr.one.enabled=false
payinstr.two.enabled=false
payinstr.three.enabled=false
[..]
I want to obtain:
payinstr.one.enabled=true
payinstr.two.enabled=true
payinstr.three.enabled=true
[..]
Is there a way using 'sed' command to change these string with a 'true' value considering that there is a dinamic part on it? Somethings like:
sed -i 's/payinstr.*.enabled=false/payinstr.*.enabled=true/'
Solution
Use a capture group with extended regular expressions (-E
or -r
):
sed -i -E 's/payinstr\.(.+)\.enabled=false/payinstr.\1.enabled=true/'
or more concisely,
sed -i -E 's/(payinstr\..+\.enabled=)false/\1true/'
Answered By - Brian61354270 Answer Checked By - Pedro (WPSolving Volunteer)