Команда скрипта Bash для поиска и выделения текста в буфере терминала

Команда скрипта Bash для поиска и выделения текста в буфере терминала

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

Вот сценарий...

Скрипт Bash вызывает «ls -1» и выводит следующее на стандартный вывод, а затем в буфер терминала?

$ ls -1
a.txt
b.txt
c.txt

Теперь мне нужна команда, которую я могу вставить в скрипт Bash, которая найдет и выделит «b.txt».

Нравиться:

$ termsearch b.txt
a.txt
[b.txt]
c.txt

Где "termsearch" - это выдуманная команда, которая, как мне кажется, мне нужна, и она преобразует b.txt в черный текст с белым фоном (выделено), а остальной текст - белый на черном фоне. Я думаю, проблема в том, что вы не можете редактировать буфер и изменять стиль текста таким образом.

Я могу использовать screen интерактивно, чтобы найти "b.txt", но он не подсвечивает (главная цель), и я не знаю, возможно ли вообще заскриптовать команды screen. Поэтому я отказался от screen. Команда script просто выводит stdout в файл, но я не хочу искать в файле. Мне нужно выполнить поиск в буфере терминала и выделить результаты на screen без дополнительного stdout. То, что мне нужно, уже выведено, его просто нужно выделить.

Я думаю, что ncurses — это выход, но я никогда не писал с ним код, и это выглядит сложным. Поэтому, прежде чем я нырну в это, я спрашиваю, может ли кто-нибудь придумать другой способ сделать это и подтвердить, что ncurses может делать то, что я хочу.

решение1

коротко: нет, нельзя

длиннее: Причина, по которой вы не можете этого сделать, заключается в том, что терминалы, как правило, не позволяют программам копировать текстотих экран. Можно окольным путем заставить приложение GUI выбрать текст с экрана терминала, и если вы тогда знаете, какой текстявляется, игдеэто так, вы могли бы в принципе затем давать команды в терминале, чтобы сказать ему перерисовать эту часть экрана, используя любые цвета. Но это только гипотетически (если только кто-то недавно не написал программу, которая делает это).

Кстати, как только текст прокручивается за пределы видимого экрана, терминалы также не будут его изменять.

решение2

Я хотел бы использовать vim.

В вашем конкретном случае я бы сделал следующее:

vim .

Затем vimмне будет представлено окно со всеми файлами в каталоге. Я могу выполнить поиск с помощью /и открыть файл, нажав Enter.

Просто убедитесь, что подсветка поиска включена.

:set hlsearch

Для других команд, возможно, этого будет достаточно:

echo "one\ntwo\nthree" | vim -

Связанный контент