echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\) \(.*\)/ \2 \1/'
A saída que eu estou esperando é /usr/local/Axis2C AXIS2C_HOME=
.
Não consigo descobrir o que estou fazendo de errado. :(
A resposta trivial é "mais barras invertidas, menos espaços":
echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\)\(.*\)/\2 \1/'
Mas a resposta mais ampla é: "espere, o que você está tentando fazer?" Deseja que os pares de valores-chave sejam divididos em variáveis úteis ou você está realmente apenas tentando inserir a entrada na sintaxe reversa para alimentá-la com outra coisa?
Você tem um espaço incorreto após o =
. Tentar:
sed 's/\(^AXIS2C_HOME=\)\(.*\)/\2 \1/'
O seguinte também funciona e é um pouco mais curto. \1
será qualquer coisa antes do primeiro/
sed 's|^\([^/]*\)\(/.*\)|\2 \1|'
O Sed é ótimo, mas o Perl também pode fazer isso e não requer a floresta de barras invertidas:
% echo "AXIS2C_HOME=/usr/local/Axis2C" | perl -pe 's/(^AXIS2C_HOME=)(.*)/\2 \1/'
/usr/local/Axis2C AXIS2C_HOME=
Além disso, você tem todo o poder do mecanismo de expressão regular, para poder fazer padrões ainda mais complexos.
sed
GNU sed que suporte expressões regulares estendidas:echo "AXIS2C_HOME=/usr/local/Axis2C" | sed -r 's/(^AXIS2C_HOME=)(.*)/\2 \1/'