Sed para inverter duas palavras

8
echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\) \(.*\)/  /'

A saída que estou esperando é /usr/local/Axis2C AXIS2C_HOME= .

Eu não consigo descobrir o que estou fazendo de errado. : (

    
por Ricko M 07.02.2011 / 18:33

3 respostas

7

A resposta trivial é "mais barras invertidas, menos espaços":

echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\)\(.*\)/ /'

Mas a resposta mais ampla é: "espera, o que você está tentando fazer?" Você quer que os pares de valores-chave sejam divididos em variáveis úteis, ou você está apenas tentando colocar a entrada na sintaxe reversa para alimentá-la com outra coisa?

    
por 07.02.2011 / 18:52
1

Você tem um espaço incorreto após o = . Experimente:

sed 's/\(^AXIS2C_HOME=\)\(.*\)/ /'

O seguinte também funciona e é um pouco mais curto. será qualquer coisa antes do primeiro /

sed 's|^\([^/]*\)\(/.*\)| |'
    
por 07.02.2011 / 18:38
0

Sed é ótimo, mas o Perl também pode fazer isso e não exige a floresta de barras invertidas:

% echo "AXIS2C_HOME=/usr/local/Axis2C" | perl -pe 's/(^AXIS2C_HOME=)(.*)/ /'
/usr/local/Axis2C AXIS2C_HOME=

Além disso, você tem todo o poder do mecanismo de expressões regulares para poder criar padrões ainda mais complexos.

    
por 07.02.2011 / 19:20

Tags