O que o título diz: assumindo que as sed
leituras de STDIN
1 poderiam ser um arquivo de texto?
Só para ficar claro, não estou falando sobre salvar sed
a saída de um arquivo de texto por meio de operadores de shell como >
, >>
ou usar ferramentas como tee
etc.
A questão aqui é se sed
sozinho pode produzir saída na forma de arquivo(s) de texto e se então, em que circunstâncias?
1: isso é simplesmente para descartar qualquer edição in-loco de um arquivo de texto com implementações que o suportem.
Sim, usando o
w
comando ou ow
sinalizador para os
comando, ambos especificados por POSIX .Por exemplo, com
qualquer coisa alimentada na
sed
entrada padrão do 's será gravada emoutput.txt
, sem saída nased
saída padrão do ' (graças à-n
opção). Isso pode ser combinado com outros comandos para manipular o espaço do padrão antes de escrevê-lo.Algumas notas de advertência e recomendações:
Se o nome do arquivo começar com um espaço em branco, use um
./
prefixo:Se o nome do arquivo contiver caracteres de nova linha, POSIXly, você pode escapá-los com barra invertida, embora não funcione com todas as
sed
implementações (em particular, não com GNUsed
nem busyboxsed
):Se ele contiver caracteres de barra invertida, em algumas implementações (os POSIX acima que suportam novas linhas em nomes de arquivos), você precisa escapá-los com barra invertida:
Observe também que o arquivo de saída será criado (ou truncado) mesmo que a entrada esteja vazia ou o
w
comando nunca seja executado como em:Ou
Você pode querer usar
awk
em vez disso para evitar esse tipo de problema