O sed pode salvar sua saída em um arquivo?

33

> pode fazer isso.

echo "text" > file

tee pode fazer isso.

echo "test" | tee file 

Pode sedfazer isso sem usar um dos itens acima? É possível salvar a saída de um sedcomando em um arquivo sem usar >ou tee?

Folatt
fonte
Tente encontrar a resposta antes de postar perguntas aqui. A primeira coisa que pedimos aos nossos usuários é pesquisar e pesquisar antes de postar. Tudo o que você precisava fazer era sed '' file > newfilee você já viu que isso >pode realmente ser usado sedcom qualquer outro programa.
terdon
11
Ainda está usando o >operador. Eu estava interessado se houvesse um comando sed que pudesse ser usado em seu lugar. Mas vou excluir esta pergunta se for tão ruim.
1640 Folatt
Ah, certo. OK, essa é uma pergunta muito diferente. Como você aceitou a sed -iresposta, editarei sua pergunta e esclarecerá o que você procura.
terdon
Eu aceitei " sed não se destina ao redirecionamento de dados como teee >(deve) deve ser".
Folatt

Respostas:

49

tee e> podem ser usados ​​para redirecionamento de dados, porque eles devem ser usados ​​para redirecionamento de dados no linux.

sed, por outro lado, é um editor de stream. O sed não é destinado ao redirecionamento de dados como tee e deve ser. No entanto, você pode usar a conjunção de comandos para fazer isso.

use tee ou> com sed

sed 's/Hello/Hi/g' file-name | tee file

ou

sed 's/Hello/Hi/g' file-name > file

use a opção sed com -i

sed -i 's/Hello/Hi/g' file-name

o último não redireciona; em vez disso, fará alterações no próprio arquivo.

ankidaemon
fonte
2
Obrigado. Você entendeu minha pergunta. Então a resposta é não. Eu pensei sedque talvez pudesse fazê-lo, porque também é capaz de criar arquivos de backup com a -i.bakopção
164 Folatt
2
Corrigir. Além disso, -i.bak não é uma opção fixa, você pode usar qualquer extensão que deseja que o seu arquivo de backup possua. por ex. -i.log também funcionará. :)
ankidaemon
Eu apenas gostaria de acrescentar que realmente estava procurando echo "test" | dd of=file status=none, suprimindo a saída de um eco sem usar o redirecionamento de saída obscuro 2> /dev/null, mas, em vez disso, pediu as limitações do sed. Fiquei realmente impressionado com as habilidades do sed, pois ele é capaz de acrescentar linhas no arquivo, dando-me a impressão de que o sed poderia fazer qualquer coisa que tee pudesse fazer e muito mais.
Folatt
11

sedpossui o wcomando que pode fazer o que você precisa:

w nome do arquivo

Escreva o espaço padrão atual no nome do arquivo.

sed 'w file'por si só terá o mesmo efeito que tee file. Se houver outros comandos sed, coloque o wúltimo:

sed 's/This/That/;w file'

No entanto, isso não será afetado pela -n/--quiet/--silentopção. Isso apenas suprime o conteúdo que, de outra forma, teria sido enviado para a saída padrão.

JigglyNaga
fonte
0

Como o ankidaemon apontou corretamente como podemos salvar a saída sed em um arquivo. Gostaria de acrescentar que, se estivermos executando algumas operações em um arquivo, por exemplo, substitua e gostaria de salvar a saída no mesmo arquivo. Há um -isinalizador no sedqual é possível fazer edições no local. No entanto, isso cria um arquivo de backup no processo. Se isso não for necessário, isso pode ser feito apenas passando o nome do arquivo vazio para o -isinalizador.

Waqar Ahmed
fonte