Como copiar texto de várias páginas do terminal para a área de transferência?

13

Eu estava visualizando uma página de manual para um software em minha máquina e precisava copiar e colar parte desse texto, mas o texto era muito mais que uma página. Estou ciente de que posso direcionar a saída para um arquivo e usar um software baseado na interface do usuário, como o gedit, para copiar o texto necessário. Mas isso pode ser feito a partir do terminal?

Joseph sugeriu um método de linha de comando (um pouco complicado para mim, ainda não sou bom com expressões regulares no Linux). Mas estou me perguntando se existe uma maneira de fazer isso enquanto ainda estou no terminal, usando o mouse .

Espero obter uma resposta genérica, no entanto, estou usando o Ubuntu.

Muhammad Gelbana
fonte

Respostas:

9

Tenho algumas idéias imperfeitas, mas talvez úteis.

Método 1 - mouse.

Use a barra de rolagem do terminal.

Detalhes (supondo xtermque serão necessários ajustes para outros terminais).

  1. Ative a barra de rolagem, se ainda não estiver. (No xtermmenu, você encontra Ctrl + Button2.)
  2. Verifique se lessnão está executando a -copção (eu tenho essa opção ativada na minha LESSvariável de ambiente, mas ela interfere no que estamos prestes a fazer, por isso tenho que digitar -cpara desativá-la.)
  3. Usando os lesscomandos que você quiser, role para cima ou para baixo para que a primeira linha que você deseja copiar fique visível na tela.
  4. botão triplo1 a linha de partida escolhida para selecioná-la.
  5. Role para baixo até a última linha que você deseja copiar ficar visível na tela. Você deve usar apenas a barra de espaço ou outras teclas de rolagem simples, não uma /pesquisa - o objetivo aqui é lessenviar todas as linhas ao terminal para que possam ser copiadas.
  6. Button3 na linha final escolhida para estender a seleção.

Possível dificuldade: seu buffer de rolagem pode não ser grande o suficiente. Isso pode ser alterado xtermcom a opção de saveLinesrecurso ou -sllinha de comando, mas não sei como alterá-lo em um xterm que já esteja em execução.

Método 2 - sem mouse.

Use o |comando (pipe) lesspara enviar o texto para xclip.

Detalhes:

  1. Usando os lesscomandos desejados , role para cima ou para baixo para posicionar a última linha que deseja copiar na parte superior da tela. Você pode pular esta etapa e a próxima etapa se desejar copiar todo o caminho até o fim.
  2. Use o mcomando (marca) para definir uma marca na posição final escolhida. As marcas são um recurso útil por si só, e você já deve conhecê-las vi, mas, caso não o faça: mxdefine uma marca, onde xpode ser qualquer letra, e 'xretorna para você mais tarde.
  3. Agora role para cima para que a primeira linha que você deseja copiar fique na parte superior da tela.
  4. Use o comando pipe: |xque exibirá um prompt para você digitar um comando externo. O xdeve ser a mesma letra marca você usou no mcomando, ou $para "todo o caminho até o fim". Digite xcliplá.

O simples caso de copiar a página de manual inteira reduz-se a g|$xclipEnter.

Aviso (isto é, a coisa horrível que acabou de acontecer comigo ): xclipserá semi-plano de fundo, sendo executado como parte do lessgrupo de processos. Se você tentar suspender less, iniciar outro trabalho no mesmo terminal e colar nele, ele não funcionará. Em seguida, quando você primeiro colocar o man/ lessjob em primeiro plano , de repente a pasta será exibida. Eu acho que isso deve ser considerado um xclipbug ...


fonte
2
Usuários de Mac podem usar o pbcopy se não tiverem o xclip instalado.
Mike Hedman
3

O multiplexador de terminal gosta tmuxou screengeralmente tem uma funcionalidade como esta (ou seja, salvar parte do buffer de rolagem para arquivar ou canalizar para algum comando) e usá-los geralmente é uma boa ideia, então você pode querer dar uma olhada em um desses .

peterph
fonte
2

Conforme descrito no Nixcraft :

  1. Obter xclip:

    sudo apt-get install xclip 
    

    ou

    yum install xclip
    

    em um sistema baseado em RPM.

  2. man man | your_magic_here | xclip -selection clipboard
  3. Ctrl+ Vao conteúdo do seu coração. Você pode remover -selection clipboardpara escolher colar clicando no meio do mouse (chamada seleção primária).

Observe que your_magic_hereé um espaço reservado para um filtro de texto ( sed/ awk/ perl/ ...) que seleciona a parte desejada da página de manual de acordo com seu caso de uso específico, que você não descreveu, então, receio que não possa ser específico com um exemplo.

Joseph R.
fonte
Além de xcliphaver também xsel(e outros). Você também pode dar uma olhada nesta discussão da área de transferência .
Peterph
Existe uma maneira de fazer isso usando o mouse? Para que, quando o mouse chegar ao final da página, ela rolará.
Muhammad Gelbana
0

Depende do seu programa de terminal, mas a maioria dos programas de terminal não tem a funcionalidade para salvar o texto selecionado.

LXTerminal, uxterm, Konsole e GNOME Terminal parecem não ter esse 'recurso', mas pode haver outros que o possuam. Veja a estrutura de menus do programa de terminal e pode haver algo como "Salvar selecionado"

Timo
fonte
0

Supondo que você use gnome-terminale lesscomo pager, manvocê pode:

  • Corra lesspara mancom a -Xtecla para desativar a tela alternativa, por exemplo:LESS=-X man less

Isso permitirá anexar a saída do manbuffer de histórico do emulador de terminal. Consulte esta resposta para obter mais detalhes /unix//a/38638/87918 .

  • Role até a última página do texto que você deseja copiar. (Todo o texto rolado será salvo no buffer do histórico durante a rolagem)
  • Selecione o texto com o mouse do gnome-terminalinício da última página à primeira, arrastando o mouse até a borda superior da janela. O processo detalhado de seleção de texto é descrito aqui :

Isso não funciona no Terminal Gnome. Em vez disso, o que você precisa fazer é iniciar a seleção com o botão esquerdo do mouse e, enquanto a faz, arraste o cursor do mouse para a borda da janela (ou fora da janela). O GT irá rolar as coisas para você, estendendo a seleção no processo. A rolagem do GT é suficientemente rápida para que este seja um processo razoavelmente conveniente e intuitivo, sem dúvida melhor do que o xterm.

  • Agora você selecionou o texto (qualquer página que desejar) e poderá copiar e colar onde quiser.
ks1322
fonte
0

Use o | (pipe) com menos marcações, como foi respondido por Wumpus Q. Wumbley em sua segunda opção , mas redirecionando usando tee para anexar a um arquivo existente já existente para o efeito:

|tee >> ~/helpaggregator.txt

Sugiro um arquivo existente, pois normalmente é necessário consultar ao aprender novos comandos e se gosta de mantê-los consolidados. Além disso, a conclusão da guia é útil.

taatparya
fonte