Как скопировать многостраничный текст из терминала в буфер обмена?


13

Я просматривал справочную страницу для программного обеспечения на моем компьютере, и мне нужно было скопировать и вставить часть этого текста, но текст был гораздо больше, чем одна страница. Я знаю, что могу направить вывод в файл и использовать программное обеспечение на основе пользовательского интерфейса, такое как gedit, для копирования нужного мне текста. Но можно ли это сделать из терминала?

Джозеф предложил метод командной строки (для меня это немного сложно, я не очень хорошо разбираюсь в регулярных выражениях в Linux). Но мне интересно, есть ли способ сделать это, пока я все еще на терминале, с помощью мыши .

Я надеюсь, что получу общий ответ, однако я использую Ubuntu.

Ответы:


9

У меня есть пара несовершенных, но, возможно, полезных идей.

Способ 1 - мышиный.

Используйте полосу прокрутки терминала.

Подробности (при условии xterm, что для других терминалов потребуются корректировки).

  1. Включите полосу прокрутки, если это не так. (В xterm, это в меню, которое вы получаете с помощью Ctrl + Button2.)
  2. Убедитесь, что lessне работает с этой -cопцией (у меня эта опция включена в моей LESSпеременной среды, но она мешает тому, что мы собираемся сделать, поэтому я должен набрать, -cчтобы отключить ее.)
  3. Используя любые lessкоманды, которые вам нравятся, прокрутите вверх или вниз, чтобы первая строка, которую вы хотите скопировать, была видна на экране.
  4. Triple-Button1 выбранной вами стартовой линии, чтобы выбрать его.
  5. Прокрутите вниз, пока на экране не появится последняя строка, которую вы хотите скопировать. Вы должны использовать только пробел или другие простые клавиши прокрутки, а не /поиск - смысл в том, lessчтобы отправить все строки на терминал, чтобы их можно было скопировать.
  6. Button3 на выбранной вами конечной строке, чтобы расширить выбор.

Возможная трудность: ваш буфер прокрутки может быть недостаточно большим. Это можно изменить xtermс помощью параметра saveLinesресурса или -slкомандной строки, но я не знаю, как это изменить в уже запущенном xterm.

Способ 2 - без мышки.

Используйте команду |(pipe) lessдля отправки текста xclip.

Детали:

  1. Используя любые lessкоманды, которые вам нравятся, прокрутите вверх или вниз, чтобы расположить последнюю строку, которую вы хотите скопировать, в верхней части экрана. Вы можете пропустить этот шаг и следующий шаг, если вы хотите скопировать весь путь до конца.
  2. Используйте команду m(mark), чтобы установить отметку в выбранной вами конечной позиции. Марки сами по себе являются полезной функцией, и вы должны знать их уже vi, но на случай, если вы этого не сделаете: mxустанавливает метку, где xможет быть любая буква, и 'xвозвращает вас туда позже.
  3. Теперь прокрутите вверх, чтобы первая строка, которую вы хотите скопировать, находилась вверху экрана.
  4. Используйте команду pipe: |xкоторая вызовет запрос на ввод внешней команды. Это xдолжна быть та же самая буква, которую вы указали в mкоманде, или $«до самого конца». Типа xclipтам.

Простой случай копирования всей страницы руководства сводится к g|$xclipEnter.

Предупреждение (то есть ужасная вещь, которая только что произошла со мной ): xclipбудет полу-фоновой, работающей как часть группы lessпроцессов. Если вы попытаетесь приостановить работу less, запустите другое задание на том же терминале и вставите в него, оно не будет работать. Затем, когда вы позже наметите man/ lessjob, вдруг произойдет вставка. Я думаю, что это следует считать xclipошибкой ...


2
Пользователи Mac могут использовать pbcopy, если у них не установлен xclip.
Майк Хедман

3

Терминальный мультиплексор похож tmuxили screenобычно имеет такую ​​функциональность (то есть, чтобы сохранить часть буфера прокрутки в файл или передать его какой-либо команде), и в любом случае его использование обычно является хорошей идеей, так что вы можете взглянуть на один из них. ,


2

Как указано на Nixcraft :

  1. Получить xclip:

    sudo apt-get install xclip 
    

    или

    yum install xclip
    

    на основе системы RPM.

  2. man man | your_magic_here | xclip -selection clipboard
  3. Ctrl+ Vк вашему сердцу. Вы можете удалить, -selection clipboardчтобы выбрать вставку, щелкнув средней кнопкой мыши (это называется основной выбор).

Обратите внимание, что your_magic_hereэто заполнитель для текстового фильтра ( sed/ awk/ perl/ ...), который выбирает нужную часть справочной страницы в соответствии с вашим конкретным случаем использования, который вы не описали, поэтому я боюсь, что не могу быть конкретным с примером.


Помимо xclipесть также xsel(и другие). Вы также можете посмотреть это обсуждение в буфере обмена .
Петер

Есть ли способ сделать это с помощью мыши? Чтобы, когда мышь достигла конца страницы, страница прокручивалась.
Мухаммед Гелбана

0

Это зависит от вашей терминальной программы, но большинство терминальных программ не имеют функции для сохранения выбранного текста.

LXTerminal, uxterm, Konsole и GNOME Terminal, похоже, не имеют этой «функции», но могут быть и другие, которые ее имеют. Посмотрите на структуру меню вашей терминальной программы и там может быть что-то вроде «Сохранить выбранное»


0

Предполагая, что вы используете gnome-terminalи lessкак пейджер, manвы можете:

  • Запуск lessдля manс -Xключом для отключения альтернативного экрана, например:LESS=-X man less

Это позволит добавить вывод manбуфера истории эмулятора терминала. Смотрите этот ответ для более подробной информации /unix//a/38638/87918 .

  • Прокрутите до последней страницы текста, который вы хотите скопировать. (Весь прокручиваемый текст будет сохранен в буфере истории при прокрутке)
  • Выделите текст мышью в gnome-terminal начале от последней страницы к первой, перетаскивая мышь к верхнему краю окна. Подробный процесс выделения текста описан здесь :

Это не работает в Gnome Terminal. Вместо этого вам нужно начать выделение левой кнопкой мыши, а во время его выполнения перетащить курсор мыши к краю окна (или за пределы окна). GT будет прокручивать вещи для вас, расширяя выбор в процессе. Прокрутка в GT достаточно быстрая, так что это достаточно удобный и интуитивно понятный процесс, возможно, лучше, чем у xterm.

  • Теперь у вас есть выделенный текст (любые страницы, которые вы хотите), который вы можете скопировать и вставить в любое место.

0

Используйте | (труба) команда поменьше с отметками, как было дано ответом Wumpus Q. Wumbley во втором его варианте , но перенаправляет, используя tee для добавления к существующему файлу, уже существующему для этой цели:

|tee >> ~/helpaggregator.txt

Я предлагаю существующий файл, так как обычно нужно обращаться к нему при изучении новых команд, и нравится сохранять их консолидированными. Кроме того, вкладка завершения удобна.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.