Substituindo uma string por aspas seletivamente usando sed

2

Eu tenho um arquivo.

$ cat file
"bar":  false
"foo":  false

Eu preciso substituir a palavra false por true apenas no padrão "foo": false . O problema é citações e espaços.

Eu pensei em duas maneiras:

  1. Para isolar todo o padrão em algum tipo de qoutes / aspas duplas.
  2. Para substituir apenas o "falso" que tem um "foo" antes.

Um exemplo de tentativa de 2 opção:

$ sed -i 's/\(.*foo\)/false/true/g' file

Ele falhou.

    
por Josef Klimuk 29.05.2018 / 19:04

1 resposta

9

Use um endereço. As citações não são um problema se você citar sua expressão sed

$ sed '/"foo"/ s/false/true/' file
"bar":  false
"foo":  true

Se você realmente precisa corresponder a todo o padrão, tudo bem:

$ sed '/"foo": *false/ s/false/true/' file
"bar":  false
"foo":  true

* corresponde a qualquer número do caractere precedente (espaço).

Você pode usar \s para também corresponder a tabulações (qualquer espaço em branco horizontal):

sed '/"foo":\s*false/ s/false/true/' file

Adicione a opção -i após o teste para modificar o arquivo original.

    
por Zanna 29.05.2018 / 19:13