Don't you need to actually capture for that to work? i.e. for variant #2:
-r -e "s/WARNING: (\([a-zA-Z0-9./\\ :-]\+\))/${warn}WARNING: \1${c_end}/g" \
(Note: untested)
Without the -r
argument back-references (like \1
) won't work unless each parenthesis is escaped with a \
character.
With -r
, argument back-references (like \1
) won't work unless the parenthesis are NOT escaped.
This error is common for parentheses that are not escaped. Escape them and try again.
For example:
/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n(.)/\1/g
Should be escaped with backslashes before each parenthesis:
/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n\(.\)/\1/g
If the -r
/--regexp-extended
option is not provided, then the capturing parentheses must be escaped.
You need escape the /
after the .
sed -e "s/\([a-zA-Z0-9.\/\\ :-]\+\)/\1/g"
Or if you don't want to worry about escaping, use |
sed -e "s|\([a-zA-Z0-9./\\ :-]\+\)|\1|g"
EDIT:
sed -e "s|WARNING: \([a-zA-Z0-9.-/\\ :]+\)|${warn}WARNING: \1${c_end}|g"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With