Eu quero encontrar o lado direito de uma expressão em um arquivo e substituir seu valor por outra coisa 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 sed
comando. Alguma ideia para conseguir isso?
Que tal:
/^power /
é um especificador de endereço, neste caso procurando uma linha que corresponda a um regex^power
.s
é um comando de substituição, correspondendo a um regex sendo tudo após o=
.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ê quiser/precisar canalizar algo para
sed
, isso é fácil - apenas| sed ..
.Se o espaço em branco imediatamente após a palavra inicial (ex.
power
) puder ser uma tabulação, use -a[[:blank:]]
. Algumas versõessed
permitem que você use\t
para um caractere de tabulação definido.Para encontrar as linhas
TheFile
que começam com a palavrapower
seguida por uma certa quantidade de espaço em branco e um sinal de igual, e substituir o que vier depois desse sinal de igual porsomething
:[[:blank:]]*
corresponde a zero ou mais espaços ou tabulações. Isso preserva o espaço em branco antes e depois do arquivo=
. O\1
no texto de substituição inserirá a parte da string correspondente ao primeiro parêntese.Para fazer a alteração no local com, por exemplo, GNU
sed
, adicione o-i
sinalizador, caso contrário, redirecione a saída para um novo arquivo.Testando: