^ x ^ y truque de unix para todas as instâncias no último comando?

83

Um dos meus truques favoritos do Unix é ^x^y , que pegará o último comando e substituirá a primeira instância de "x" por "y". No entanto, eu estou querendo saber se um truque similar funciona para substituir todas as instâncias de "x" com "y" no último comando?

    
por Mason 24.02.2014 / 02:49

2 respostas

94

Você pode usar a notação !!:gs/search/replace/ para fazer o que quiser. Isso utiliza a pesquisa global & substituir ( :gs ):

antes

$ echo "harm warm swarm barm"
harm warm swarm barm

depois

$ !!:gs/arm/orn/
echo "horn worn sworn born"
horn worn sworn born

Referências

por 24.02.2014 / 03:09
38

Não acredito que haja uma maneira fácil de adicionar algo a ^string1^string2 para fazer com que bash substitua todas as ocorrências. Como o slm ressalta, você tem que escrever !!:gs/string1/string1 .

Mas em zsh , você pode adicionar apenas :G :

$ echo foo foo
foo foo
$ ^foo^bar^:G
echo bar bar
bar bar

Em bash e zsh , você também pode usar fc -s da seguinte forma:

$ echo foo foo
foo foo
$ fc -s foo=bar
echo bar bar
bar bar

Isso geralmente é feito em um alias chamado r , então você pode fazer:

$ echo foo foo
foo foo
$ r foo=bar
echo bar bar
bar bar
    
por 24.02.2014 / 04:09