Muitas vezes sou incomodado com a mesma coisa, e há algumas maneiras de lidar com isso:
-
Basta aceitar, às vezes não vale a pena gastar tempo para contornar isso.
-
como PSkocik mencionou, você pode usar, por exemplo,
tail -n 5 <(dmesg | grep USB)
-
Torne-se mais hábil com os recursos de edição do seu shell - por exemplo, no bash (e muitos outros programas que usam readline) você pode usar Ctrl A para chegar ao início da linha, ESC f e ESC b para avançar e retroceder uma "palavra" e Ctrl-X Ctrl + E para editar a linha atual em $ EDITOR (por exemplo,
vim
)
Existem muitos outros comandos de edição disponíveis e readline
está totalmente documentado em arquivos .info. Em um sistema Debian, instale o pacote readline-doc
. Outras distros podem incluir a documentação no próprio pacote readline ou podem separá-lo como o Debian faz.
Eu também recomendo instalar e usar pinfo
para uma experiência mais parecida com o navegador web do lynx (IMO, o navegador GNU info
é medonho e quase inutilizável). Se ainda não estiver em sua distro, você pode encontrá-lo no link
-
readline
também tem um modovi
para edição (o padrão é um modoemacs
-like), que algumas pessoas preferem. -
Em casos simples, você pode usar a substituição rápida: por exemplo, se o último comando que você digitou foi:
dmesg | grep -i USB | tail -n 5
então, digitar ^ USB ^ sda ^ Enter resultaria na execução deste:
dmesg | grep -i sda | tail -n 5
Para mais detalhes, consulte man bash
e pesquise HISTORY EXPANSION
, especialmente a seção Event Designators
.
e sim, fazer isso repetidamente também se torna irritante.
- Para casos mais complexos, a melhor solução é escrever um script ou função de shell que faça o que você quer e executar isso em vez de seu longo e complexo pipeline de comandos.
por exemplo. escreva um script chamado dmesg-grep
que se pareça com isto:
#! /bin/bash
# regexp to search for is arg 1. needs to be an extended regexp
# because we're using grep -E aka egrep.
re="$1"
# number of lines to output is optional arg 2 (default 5)
lines=${2:5}
dmesg | grep -iE "$re" | tail -n "$lines"
Então você pode simplesmente executar dmesg-grep usb
ou dmesg-grep sda
.
Se você fizer isso muito, crie um subdiretório bin
do seu diretório pessoal e adicione ~/bin
ao seu PATH padrão (por exemplo, em ~/.bash_profile
ou ~/.bashrc
) e salve seus scripts lá.