vários comandos em sed com entrada de xargs

0

Eu tenho um arquivo ./123bar/foo.txt que tem:

pro := text
ver := 1.0
rev := 2

e duas variáveis env:

var =2.1
var2=3

Desejo substituir todos os ver por $var e rev por $var2 . Saída esperada:

pro := text
ver := 2.1
rev := 3

Estou tentando encontrar primeiro todos os arquivos com find e grep e, em seguida, passá-los para sed para alcançar o resultado. Abaixo está o comando que estou executando:

find . -name 'foo.txt' | grep -P "\/[0-9]{3}bar" | xargs -I{} sed -E "s/:= *[0-9]+\.[0-9]+ *$/:= $var/g" -E "s/:= [0-9]+ *$/:= $var2/g" {}

não está funcionando e me dando erro:

sed: can't read s/:= [0-9]+ *$/:= 3/g: No such file or directory
pro := text
ver := 2.1
rev := 45

Como faço para corrigir isso? Uma solução mais simples / mais simples também é bem-vinda.

    
por helix 13.03.2018 / 05:09

1 resposta

1

A opção para usar várias expressões com sed é -e , não -E :

sed -e "s/:= *[0-9]+\.[0-9]+ *$/:= $var/g" -e "s/:= [0-9]+ *$/:= $var2/g"

De o manual (supondo que o GNU tenha dado o ):

'-e SCRIPT'
'--expression=SCRIPT'
Add the commands in SCRIPT to the set of commands to be run while processing the input.

-E é para usar expressões regulares estendidas.

    
por 13.03.2018 / 05:30

Tags