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
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?
Tags shell