Existe um atalho para reexecutar um comando com argumentos do último comando (não cd, ls ou echo)

3

Pesquisando através do arquivo de log passado com algo parecido com isto:

cat /path/to/logfile | grep -iEw 'some-ip-address-here|correspondig-mac-adress-here'

Isso me fornece todas as linhas de log passadas até agora, para que eu possa ver o que foi. Agora eu também quero ver o que está acontecendo, então eu preciso trocar cat com tail -f me dando isto:

tail -f /path/to/logfile | grep -iEw 'some-ip-address-here|correspondig-mac-adress-here'
    
por konqui 22.06.2016 / 09:32

2 respostas

5

Você pode usar !!:* para se referir a todas as palavras, mas ao zeroth da última linha de comando.

!! refere-se ao comando anterior, : separa a especificação do evento do designador de palavra, * refere-se a todas as palavras, mas o zeroth.

Isso é da seção HISTORY EXPANSION do bash (1).

wieland@host in ~» cat foo | grep bar
bar
wieland@host in ~» tail -f !!:*
tail -f foo | grep bar
bar

Você também pode usar a substituição rápida, em que ^string1^string2^ repete o último comando, substituindo string1 por string2 :

wieland@host in ~» cat foo | grep bar
bar
wieland@host in ~» ^cat^tail -f
tail -f foo | grep bar
bar
    
por 22.06.2016 / 10:37
1
  1. Pressione Acima ou Ctrl + P para recuperar a linha anterior. Repita se você quiser a linha antes, etc.
  2. Pressione Início ou Ctrl + A para ir ao início da linha.
  3. Pressione Alt + D para apagar a palavra sob o cursor, ou seja, o comando que você deseja substituir.
  4. Digite o comando que você deseja executar agora.
  5. Pressione Enter para executar o comando.
por 23.06.2016 / 02:14