Relendo sua pergunta, acho que você está perdendo a opção -i
para sed
. Essa é a opção que torna sed
editar o arquivo em vez de imprimir os resultados na saída padrão.
Note que é uma boa idéia testar seu comando sed
antes usando a opção -i
, já que não há comando "desfazer" se você errar.
Portanto, por exemplo, se você executar sed 's/old/new/' myfile
, verá o conteúdo de myfile
impresso em seu terminal com a primeira instância de old
em cada linha substituída por new
. Se você executar sed -i 's/old/new/' myfile
, não verá nada impresso - myfile
será (irrevogavelmente) editado no lugar.
Você também pode usar, por exemplo, -i.bak
em vez de -i
, o que fará com que o arquivo original seja salvo como myfile.bak
e o arquivo editado como myfile
. (Você pode definir qualquer extensão que quiser em vez de .bak
e não precisa começar com um ponto, mas .bak
é convencional para usar com esse propósito.)
As citações em torno de seu nome de arquivo contendo espaço são um problema separado e a resposta é simples - use aspas duplas para obter uma expansão de variáveis sem a divisão de palavras. Então, se você tem uma variável filenamevariable="My file name which contains spaces"
, você precisa se referir a ela assim: sed 's/old/new/' "$filenamevariable"
Algumas outras leituras recomendadas: