Redirecionamento não sobrescrevendo arquivo mas apenas produzindo um em branco [duplicado]

1

Eu tenho um comando que se esforça para apenas ler um arquivo e, em seguida, comentar todas as linhas indiscriminadamente, em seguida, substituir o arquivo existente.

cat file | sed 's/^/#/g' > file

Mas, para minha surpresa, isso não funciona e produz apenas um arquivo em branco. Do meu entendimento de pipes isso não deveria acontecer, já que o stdout vai para o sed, é processado pelo sed e então enviado para o arquivo. Então eu gostaria de saber porque isso está acontecendo

No lugar do comportamento esperado, implementei uma solução alternativa.

cat file | sed 's/^/#/g' > /tmp/file; mv /tmp/file file

Por que minha solução original não funciona?

    
por Greg 18.02.2015 / 23:06

1 resposta

5

Sua solução original não funciona porque, assim que você redireciona, o shell cria um arquivo vazio com esse nome. Você pode usar a opção -i de sed para corrigir esse problema. Por exemplo,

sed -i 's/^/#/g' file
    
por 18.02.2015 / 23:18

Tags