sed comando para substituir um valor no arquivo de configuração

1

Estou usando este comando:

sed -i  's/\(^TestT_STOA_TS1901=\).*/N/'/app/test/must/untuio.cf

E estou recebendo este erro:

XXXXXXXXX:/app/test/must>sed -i  's/\(^TestT_STOA_TS1901=\).*/N/'/app/test/must/untuio.cf
sed: -e expression #1, char 33: unknown option to 's'

Por que isso está acontecendo? Como posso substituir um valor em um arquivo de configuração?

    
por canonical 19.08.2015 / 15:48

3 respostas

4

Algumas maneiras:

  1. Provavelmente, da maneira mais direta, correspondendo a chave apropriada por /Key2/ e, em seguida, substituindo Value2 por Value4 :

    $ sed '/Key2/ s/Value2/Value4/' foo.txt 
    Key1=Value1            
    Key2=Value4          
    Key3=Value3
    
  2. Se você sabe que os dígitos virão finalmente e se você quer apenas substituir esses dígitos por outra coisa (aqui substituindo 2 por 4 ):

    $ sed '/Key2/ s/[[:digit:]]\+$/4/' foo.txt 
    Key1=Value1
    Key2=Value4
    Key3=Value3
    

Eu também tenho algumas outras maneiras, mas elas dependem do seu caso de uso. Deixe-nos saber se isso seria suficiente.

Seus erros em sed -i -e '/KEY=/ s/= .*/= new_value/' /path/to/file :

  • De acordo com o seu exemplo, nenhum Key será correspondido com /KEY=/ , pois não está nos casos apropriados e há um número após Key e = depois disso

  • s/= .*/= new_value/ , do seu exemplo não há espaço após = , mas sua substituição de padrão parece ter um espaço no arquivo real. Caso contrário, no que diz respeito ao seu exemplo dado, não há espaço após = .

por heemayl 19.08.2015 / 15:55
3

Use sed :

sed -i 's/\(^Key2=\).*/Value4/' file

O -i flag ativa a edição de sed s no local. Ele procura por uma linha que começa com Key2= e substitui a linha pela chave ( ) seguida pelo novo valor Value4 .

Editar :

Se você tiver barras ou outros caracteres de comando usados em sed , será necessário ignorá-los:

sed -i 's/\(^Key2=\).*/long\/value\'/with$many\"strange\^characters/' /path/to/file

Editar 2 : no seu caso:

sed -i  's/\(^TestT_STOA_TS1901=\).*/N/' /app/test/must/untuio.cf
    
por chaos 19.08.2015 / 15:52
1

Usando awk ? =)

awk -F= '=="Key2" {printf "%s=%s\n",,"Value4"; next}1' your_input_file

Exemplo

O arquivo de entrada foo

cat foo

Key1=Value1            
Key2=Value2          
Key3=Value3

A saída do comando

% awk -F= ' =="Key2" {printf "%s=%s\n",,"Value4"; next}1' foo
Key1=Value1            
Key2=Value4
Key3=Value3
    
por A.B. 19.08.2015 / 16:02