echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\) \(.*\)/ \2 \1/'
The output I am expecting is /usr/local/Axis2C AXIS2C_HOME=
.
I can't figure out what I am doing wrong. :(
The trivial answer is "more backslashes, fewer spaces":
echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\)\(.*\)/\2 \1/'
But the broader answer is, "wait, what are you trying to do?" Do you want the key-value pairs to be split into useful variables, or are you really just trying to munge the input into the reverse syntax in order to feed it to something else?
You have an erroneous space after the =
. Try:
sed 's/\(^AXIS2C_HOME=\)\(.*\)/\2 \1/'
The following also works and is a bit shorter. \1
will be anything before the first /
sed 's|^\([^/]*\)\(/.*\)|\2 \1|'
Sed is great, but Perl can do this too, and it doesn't require the forest of backslashes:
% echo "AXIS2C_HOME=/usr/local/Axis2C" | perl -pe 's/(^AXIS2C_HOME=)(.*)/\2 \1/'
/usr/local/Axis2C AXIS2C_HOME=
Plus, you've got the full power of the regular expression engine, so you can do even more complex patterns.
sed
such as GNU sed that supports extended regular expressions: echo "AXIS2C_HOME=/usr/local/Axis2C" | sed -r 's/(^AXIS2C_HOME=)(.*)/\2 \1/'