Re: bash quoting problems
On 2011-08-09 01:51, Bob Proulx wrote:
sed -i s"|^\( *PATH=\"\)\(.*\)|\1$ADD:\2|" ~/profile-test
The above seems like you are doing more than you need with the long
match for (.*) and \2. It isn't needed. It is much more efficient to
avoid matching a potentially infinite amount of data.
Thanks for the tip, I just assumed sed does greedy matching.
sed -i "s|^\( *PATH=\"\)|\1$ADD:|" ~/profile-test
Sometimes quoting can be complicated. In which case it is often
useful to drop out of double quotes and move to single quotes.
sed -i "s|^\( *PATH="'"'"\)|\1$ADD:|" ~/profile-test
That "'"'" looks scary but isn't. ..." '"' "... One double quote
to stop the double quoted string. One single, one double, one single,
to insert one double quote. Then another double quote to pick up the
double quoted string.
Thanks, I saw a recommendation to that effect when googling but didn't
get how it worked until now.
Or reverse it for the variable. Which is probably what I would do
sed -i 's|^\( *PATH="\)|\1'"$ADD"':|' ~/profile-test
Good thinking I'll keep that in mind :D