repete a substituição de expansão do histórico bash para todos os jogos

2

:& repete a substituição da expansão do histórico bash. Por exemplo:

$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9
echo 9 1 1 1 1
9 1 1 1 1
$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9^:&
echo 9 9 1 1 1
9 9 1 1 1
$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9^:&:&:&:&
echo 9 9 9 9 9
9 9 9 9 9
$ 

Como visto acima, é necessário digitar :& para cada repetição. Existe uma maneira de repetir a substituição de todas as correspondências automaticamente? Quero dizer algo como:

$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9^:*
echo 9 9 9 9 9
9 9 9 9 9
$ 
    
por Martin 10.06.2015 / 00:47

1 resposta

6

Você pode usar designadores de eventos em vez disso:

$ echo 1 1 1 1 1
1 1 1 1 1
$ !!:gs/1/9/
echo 9 9 9 9 9
9 9 9 9 9

!! é um designador de palavras que se expande para o comando anterior corre. s e g são modificadores :

After the optional word designator, you can add a sequence of one or more of the following modifiers, each preceded by a ‘:’.

s/old/new/

Substitute new for the first occurrence of old in the event line. [...]

g/a

Cause changes to be applied over the entire event line. Used in conjunction with ‘s’, as in gs/old/new/, or with ‘&’.

Portanto, !!:gs/1/9/ significa "executar o comando anterior, substituindo todos os 1s por 9s".

    
por 10.06.2015 / 01:31