echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\) \(.*\)/ \2 \1/'
La salida que espero es /usr/local/Axis2C AXIS2C_HOME=
.
No puedo entender lo que estoy haciendo mal. :(
La respuesta trivial es "más barras invertidas, menos espacios":
echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\)\(.*\)/\2 \1/'
Pero la respuesta más amplia es: "espera, ¿qué estás tratando de hacer?" ¿Desea que los pares clave-valor se dividan en variables útiles, o realmente solo está tratando de combinar la entrada en la sintaxis inversa para alimentarla a otra cosa?
Tienes un espacio erróneo después del =
. Tratar:
sed 's/\(^AXIS2C_HOME=\)\(.*\)/\2 \1/'
Lo siguiente también funciona y es un poco más corto. \1
será cualquier cosa antes de la primera/
sed 's|^\([^/]*\)\(/.*\)|\2 \1|'
Sed es genial, pero Perl también puede hacer esto, y no requiere el bosque de barras invertidas:
% echo "AXIS2C_HOME=/usr/local/Axis2C" | perl -pe 's/(^AXIS2C_HOME=)(.*)/\2 \1/'
/usr/local/Axis2C AXIS2C_HOME=
Además, tiene todo el poder del motor de expresión regular, por lo que puede hacer patrones aún más complejos.
sed
GNU sed que admite expresiones regulares extendidas:echo "AXIS2C_HOME=/usr/local/Axis2C" | sed -r 's/(^AXIS2C_HOME=)(.*)/\2 \1/'