esponja de moreutils - qual é a diferença para redirecionar shell? exemplos úteis?

6
> brew install moreutils                                                          
==> Downloading https://homebrew.bintray.com/bottles/moreutils-0.55.yosemite.bottle.tar.gz    
######################################################################## 100.0%               
==> Pouring moreutils0.55.yosemite.bottle.tar.gz       
                    
por Ivanov 06.06.2015 / 10:42

2 respostas

19

Suponha que você tenha um arquivo chamado input , você deseja remover toda a linha que começa com # em input . Você pode obter todas as linhas não começam com # usando:

grep -v '^#' input

Mas como você faz alterações em input ? Com o toolchest POSIX padrão, você precisa usar um arquivo temporário, algo como:

grep -v '^#' input >/tmp/input.tmp
mv /tmp/input.tmp ./input

Com redirecionamento de shell:

grep -v '^#' input >input

truncará input antes de você ler a partir dele.

Com sponge , você pode:

grep -v '^#' input | sponge input
    
por 06.06.2015 / 10:58
5

A página inicial do moreutils documenta um caso de uso típico:

sed "s/root/toor/" /etc/passwd | grep -v joey | sponge /etc/passwd

Aqui, o / etc / passwd está sendo gravado e lido e está sendo modificado. Sem limpar o stdin antes de escrever, o / etc / passwd pode estar corrompido (como o arquivo mudou durante a leitura).

    
por 06.06.2015 / 10:59