Как скопировать результаты из команды grep в буфер обмена Bash?
Если я набираю что-то в терминале Linux bash без X, а затем использую Ctrl+u, все, что я набрал, сохраняется в "буфере обмена" bash (из-за отсутствия лучшего термина), и я могу набрать его снова, используя Ctrl + y,
Как я могу скопировать результаты из команды grep текстового файла в такой буфер обмена bash? Например, если у меня есть файл INSTALL, как это:
./installprocedure - do-some-long-and-complex-operation-on-dir dir1
Как я могу скопировать содержимое команды grep, чтобы она была доступна с помощью Ctrl + y? Например:
скопировать содержимое в буфер обмена bash "grep installprocedure INSTALL" Ctrl+ Y./installprocedure --do-some-long-and-complex-operation-on-dir dir1 #курсор доступен здесь
2 ответа
Насколько я знаю, нет прямого способа прокормить внутренний bash
буфер, но если ваша цель состоит в том, чтобы строка в командной строке была в состоянии отредактировать ее, это можно сделать, используя два bash
функции:
Подстановка параметров (как упомянуто RedGrittyBrick) и
readline
функцияshell-expand-line
:shell-expand-line
(MCE)Разверните строку, как это делает оболочка. Это выполняет расширение псевдонима и истории, а также все расширения слов оболочки.
Пример:
$ $(grep installprocedure INSTALL)
Meta + Ctrl + E
Это заменит командную строку результатом подстановки команды.
Расширяя это, вы можете создать readline
макрос, чтобы сделать это автоматически по любой произвольной команде, без необходимости заключать в backticks или $()
:
$ bind '"\C-xs": "\C-a$(\C-e)\e\C-e"'
Нажатие Ctrl+X с последующим s переместит курсор в начало строки (\C-a
) буквально вставьте $(
, переместиться в конец строки (\C-e
) буквально вставьте )
и, наконец, позвонить shell-expand-line
(\e\C-e
= Meta + Ctrl + e).
Другими словами, он заменит командную строку своим выводом.
Вы уверены, что не хотите редактировать историю команд? Или, может быть, подстановка команд?
История команд
В bash нажмите клавишу со стрелкой вверх, чтобы вызвать предыдущую команду. Вы можете редактировать строку обычным способом.
В качестве альтернативы вы можете обратиться к предыдущим командам и к частям предыдущих команд, используя запись с восклицательным знаком.
Использование вывода одной команды в качестве параметров для другой команды
./bar barparam `grep foo foofile`
Использование вывода одной команды в качестве ввода для другой команды
grep foo foofile | ./bar barparam
Использование переменной оболочки в качестве именованного буфера обмена
clipboard = `grep foo foofile`
./bar barparam $clipboard