Modificando um arquivo com sed usando redirecionamento

0

isso funciona como eu esperava:

$ cat in
abc 123
$ sed -E -i .bk 's/[0-9]+/(&)/' in
$ cat in 
abc (123)
$ cat in.bk
abc 123 

Mas não isso:

$ cat in
abc 123
$ sed -E 's/[0-9]+/(&)/' in 
abc (123)
$ sed -E 's/[0-9]+/(&)/' in > in
$ cat in 

Como posso modificar o conjunto de comandos acima, de modo que o último comando retorne:

abc (123)

?

    
por Erwann 13.09.2017 / 18:31

2 respostas

0
sed -i -E 's/[0-9]+/(&)/' in

Alternativamente,

sed -E 's/[0-9]+/(&)/' in | tee in

sobrescreve o arquivo E fornece a saída no stdout.

    
por 13.09.2017 / 19:01
1

Pergunta: Modificando um arquivo com sed usando redirecionamento .

Resposta: obviamente, a opção -i foi adicionada a sed por um motivo. Apenas usar redirecionamento deixa você olhando para uma solução um pouco complicada.

cat in | cat - | sed -E 's/[0-9]+/(&)/' > in

O seguinte também funciona, mas apenas se o arquivo de entrada contiver uma única linha:

cat in | parallel 'echo {} | sed -E "s/[0-9]+/(&)/" > in'

sed -E 's/[0-9]+/(&)/' in | parallel 'echo {} >in'

Explicação: A explicação é fornecida por Paulo em seu comentário à questão (o redirecionamento é interpretado antes que o comando seja executado). Minha solução é adicionar um nível de indireção entre ler o arquivo e escrever de volta nele.

    
por 20.09.2017 / 12:48

Tags