Deixe-me levá-lo a esta curta viagem:
Terminal aberto.
Tipo
cat <any text file in your current working directory, containing a URL, at the beginning> | head
As primeiras 10 linhas desse arquivo de texto são impressas na saída padrão, exibidas na tela.
No meu caso fica assim:
(Beginning of line 7)yada yada yada [[https://example-url-1.com][Example URL #1]] - [[https://example-url-2.com][Example URL #2]] yada yada yada (End of line 7)
Dois links, bem no meio da linha 7, cercados por texto, em vez de ficarem sozinhos nessa linha.
E agora a pergunta do quiz: Como copiar apenas a URL nº 2 na memória para colá-la em outro programa sem usar o mouse?
Em GNU emacs? Super fácil: Pesquise por 'ht' - o cursor pula para o início do link, CM SPC, o link é marcado, Mw, a seção marcada é copiada. Mas no bash?
Você pode fazer algo assim ao usar o tmux . Ele tem um modo de cópia pesquisável com combinações de teclas do tipo Emacs disponíveis.
Você entra no modo de cópia com
C-b
(prefixo) seguido porC-[
(combinações de teclas padrão), pesquisa na saída comC-s
, vai para o início da palavra comM-b
, inicia a seleção comC-Space
, marca o que deseja movendo o cursor (você também pode vincular onext-word
comando em sua configuração ), copie a seleção (e saia do modo de cópia) comM-w
e cole comC-]
.Essas são as ligações padrão de fato, mas você pode querer vinculá-las de maneira diferente. Esteja ciente de que você pode precisar tomar medidas extras para sincronizar seu buffer de colagem com a área de transferência do sistema se quiser colar isso fora do terminal! Mas fico com PTSD só de pensar em minhas experiências com coisas assim, e está meio fora do escopo de qualquer maneira.
É o chamado multiplexador de terminal e atua como um emulador de terminal dentro do seu emulador de terminal. O Tmux potencialmente vem com seus próprios problemas (por exemplo, tempo necessário para configuração, uma camada extra de indireção, etc.). Pode ou não funcionar para o seu fluxo de trabalho, mas se você estiver usando o Emacs, presumo que esteja disposto a gastar tempo na configuração e avaliar se funciona para você. Me mande um ping se tiver dúvidas
Isso extrairá o segundo URL correspondente de cada linha e o copiará para a área de transferência. Se houver várias linhas contendo dois ou mais URLs, todas serão copiadas para a área de transferência. Você pode querer adicionar uma nova linha ou uma tabulação ou algo na saída para separá-los. Você pode facilmente adicionar uma nova linha a cada um
print
usando-l
a opção perl (ou seja, useperl -lne ...
em vez deperl -ne ...
).Se você precisava apenas do segundo URL da primeira linha correspondente, adicione uma
exit
declaração após a primeira correspondência bem-sucedida e imprima - por exemplo, alterando o código perl para:De qualquer forma, ele usa perl para capturar todos os URLs correspondentes em array
@M
e, em seguida, imprimir o segundo elemento,@M
se existir (os arrays perl começam em 0, não 1, então é$M[1]
).Eu usei perl aqui porque perl facilita a extração de todas as substrings correspondentes a um padrão, mas você pode usar awk ou qualquer outra linguagem (ou pipeline de ferramentas) de sua preferência.
A ferramenta importante aqui é
xsel
, nãohead
orperl
- xsel é o que faz a cópia do stdin para a área de transferência. Consulteman xsel
para obter detalhes.Ah, mas o trabalho do shell é apenas oferecer uma interface de comando (programável) e executar outros programas – ele não faz nada com a saída desses programas (ao contrário do emacs, que assume o controle de como ele coloca, por exemplo, o conteúdo de arquivos ou a saída de programas na tela).
Então você está meio que latindo para a árvore errada: o que você quer é um recurso do programa que exiba a saída das coisas que aparecem no console, não de um dos programas que colocam coisas no console!
Portanto, o programa ao qual você se refere quando diz "Abrir Terminal". é com o que você precisa se preocupar - não com o programa que inicia (bash).
Não sei qual emulador de terminal você está usando – você não teve chance de nos dizer. Portanto, suponha que pode ser
gnome-terminal
, que não oferece uma maneira de interagir com o teclado com o conteúdo do console exibido.Eu recomendo tentar um emulador de terminal diferente:
alacritty
. Deve ser facilmente instalável em qualquer Linux/BSD, MacOS ou Windows em que você esteja. Tem um modo visual que você pode usar da boa família de editores de texto para Unixoids; porque, obviamente, você não pode simplesmente interceptar pressionamentos de tecla arbitrários que deveriam estar indo para os programas em execução no terminal, você precisa alternar entre um "modo de inspeção visual" e um "interativo".Pressione Ctrl+ Shift+ Space, você será colocado em um modo com hjklnavegação; pressione /, digite
://
entere use npara navegar pelas URLs em seu terminal. Clique enterpara abrir o link atualmente destacado e, se já tiver o suficiente, saia do modo com Ctrl+ Shift+ Space.Canalize-o através...
# 1 Use o GNU Emacs - é mais eficiente para isso # 2 Isolar string - com awk, sed, grep ou cut - e use xsel para acessar a área de transferência, copiando a string isolada para a área de transferência. Nenhum xsel no sistema? Obtenha e instale-o.