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

12

Eu estava visualizando uma página man para um software na minha máquina e precisei copiar e colar parte desse texto, mas o texto era muito mais do que uma página. Estou ciente de que posso direcionar a saída para um arquivo e usar software baseado em interface do usuário, como gedit , para copiar o texto de que preciso. 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 eu estou querendo saber se há uma maneira de fazer isso enquanto eu ainda estou no terminal, usando o mouse .

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

    
por Muhammad Gelbana 18.01.2014 / 22:45

5 respostas

8

Eu tenho algumas idéias imperfeitas, mas talvez úteis.

Método 1 - mousey.

Use a barra de rolagem do terminal.

Detalhes (assumindo xterm ; ajustes serão necessários para outros terminais.)

  1. Ative a barra de rolagem, se ainda não estiver. (Em xterm , está no menu que você obtém com Ctrl + Button2.)
  2. Verifique se less não está sendo executado com a opção -c (tenho essa opção ativada na variável de ambiente LESS , mas isso interfere no que estamos prestes a fazer, por isso preciso digitar -c para desligá-lo.)
  3. Usando os comandos less de que você gosta, role para cima ou para baixo para que a primeira linha que você deseja copiar esteja visível na tela.
  4. triple-Button1 sua linha de partida escolhida para selecioná-la.
  5. Desloque-se até a última linha que deseja copiar estiver visível na tela. Você deve usar apenas a barra de espaço ou outras teclas de rolagem simples, não uma / search - o ponto aqui é obter less para enviar todas as linhas para o terminal para que elas possam ser copiadas.
  6. Button3 na sua 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 em xterm com a opção de linha de comando saveLines ou -sl , mas não sei como alterá-lo em um xterm que já está em execução.

Método 2 - não mousey.

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

Detalhes:

  1. Usando os comandos less de que você gosta, role para cima ou para baixo para posicionar a linha última que deseja copiar na parte superior da tela. Você pode pular esta etapa e a próxima etapa se quiser copiar até o final.
  2. Use o comando m (mark) para definir uma marca na posição final escolhida. As marcas são um recurso útil por si só, e você deve conhecê-las já a partir de vi , mas caso não: m x define uma marca, onde o x pode ser qualquer letra, e ' x retorna você mais tarde.
  3. Agora, role para cima para que a primeira linha que você deseja copiar esteja na parte superior da tela.
  4. Use o comando pipe: | x que exibirá um prompt para você inserir um comando externo. O x deve ser a mesma letra que você usou no comando m , ou $ para "todo o caminho até o fim". Digite xclip lá.

O caso simples de copiar toda a página man reduz-se a g | $ x c l i p Introduzir .

Aviso (ou seja, a coisa horrível que acaba de acontecer comigo ): xclip será semi-background, sendo executado como parte do grupo de processos less . Se você tentar suspender less , iniciar outro trabalho no mesmo terminal e colá-lo, ele não funcionará. Então, quando você forçar posteriormente o trabalho man / less , de repente a pasta será exibida. Eu acho que isso deve ser considerado um erro xclip ...

    
por 19.01.2014 / 18:17
3

O multiplexador de terminal como tmux ou screen geralmente tem uma funcionalidade como essa (ou seja, salvar parte do buffer de rolagem em um arquivo ou canalizá-lo para algum comando) e usá-los geralmente é uma boa ideia, então você pode quero dar uma olhada em um desses.

    
por 19.01.2014 / 12:27
1

Como 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 + V para o conteúdo do seu coração. Você pode remover -selection clipboard para escolher colar pelo clique do meio do mouse (chamado de seleção principal).

Observe que your_magic_here é um marcador para um filtro de texto ( sed / awk / perl / ...) que seleciona a parte desejada da man page de acordo com seu caso de uso específico, que você não descrevi então eu tenho medo de não ser específico com um exemplo.

    
por 18.01.2014 / 23:12
0

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

O LXTerminal, o uxterm, o Konsole e o Terminal GNOME parecem não ter esse 'recurso', mas pode haver outros que tenham isso. Olhe para a estrutura do menu do seu programa de terminal e pode haver algo como "Salvar selecionado"

    
por 19.01.2014 / 09:57
0

Supondo que você use gnome-terminal e less como um pager para man , você pode:

  • Execute less para a tecla man com -X para desativar a tela alternativa, por exemplo: LESS=-X man less

Isso permitirá anexar a saída de man ao buffer de histórico do emulador de terminal. Veja esta resposta para mais detalhes link .

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

This doesn't work in Gnome Terminal. Instead what you have to do is start the selection with the left mouse button and while making it, drag the mouse cursor to the edge of the window (or outside the window). G-T will scroll things for you, extending the selection in the process. G-T's scrolling is sufficiently rapid that this is a reasonably convenient and intuitive process, arguably better than xterm's.

  • Agora você selecionou o texto (as páginas que quiser) que você pode copiar & cole onde quiser.
por 28.07.2015 / 18:00