“key = value” lines: como substituir o valor de uma chave específica?

3

Eu quero encontrar o lado direito de uma expressão em um arquivo e substituir seu valor por outra usando sed . Com grep , vemos

$ grep power TheFile 
power                 = 1

Também com cut , posso acessar o valor

$ grep power TheFile  | cut -d = -f 2
 1

No entanto, não sei como canalizar isso com o comando sed . Alguma ideia para conseguir isso?

    
por mahmood 28.02.2018 / 21:15

2 respostas

6

Que tal:

sed '/^power /s/=.*$/= your-replacement/' TheFile
  1. /^power / é um especificador de endereço, neste caso, procurando uma linha que corresponda a uma regex ^power .

  2. s é um comando de substituição, correspondendo uma regex que é tudo depois do = .

  3. Observe que não há necessidade de canalizar o conteúdo do arquivo; você pode apenas especificá-lo (ou uma lista de arquivos) como um argumento de comando. Se você quer / precisa canalizar algo para sed , é fácil - apenas | sed .. .

  4. Se o espaço em branco imediatamente após a palavra inicial (por exemplo, power ) puder ser uma guia, use [[:blank:]] . Algumas versões de sed permitem que você use \t para um caractere de tabulação definido.

por 28.02.2018 / 21:28
3

Para encontrar as linhas em TheFile que começam com a palavra power , seguida por alguma quantidade de espaço em branco e um sinal de igual, e para substituir o que vem depois desse sinal de igual por something :

sed -E 's/^(power[[:blank:]]*=[[:blank:]]*).*/something/' TheFile

[[:blank:]]* corresponde a zero ou mais espaços ou tabulações. Isso preserva o espaço em branco antes e depois do = . O no texto de substituição irá inserir a parte da string que é correspondida pelo primeiro parênteses.

Para fazer a mudança no lugar com, por exemplo, GNU sed , adicione o -i flag, caso contrário, redirecione a saída para um novo arquivo.

Teste:

$ cat TheFile
power                 = 1
power123              = 1
power  123            = 1
power                 =
power                 =                 112

$ sed -E 's/^(power[[:blank:]]*=[[:blank:]]*).*/something/' TheFile
power                 = something
power123              = 1
power  123            = 1
power                 =something
power                 =                 something
    
por 28.02.2018 / 21:28

Tags