Передача поискового запроса из буфера обмена (не имени файла) в grep для поиска в папке

Передача поискового запроса из буфера обмена (не имени файла) в grep для поиска в папке

Я пытаюсь использовать xselбуфер обмена, чтобы grepперенаправить поисковый запрос в папку, полную txt-файлов. Может ли кто-нибудь подсказать, как это сделать.

решение1

С grepреализациями, которые поддерживают -rопцию рекурсии grep:

grep -rFe "$(xsel -b -o)" /path/to/your/folder

Для других grepреализаций используйте findдля поиска файлов:

find /path/to/your/folder -type f -exec \
  grep -Fe "$(xsel -b -o)" /dev/null {} +

Это /dev/nullнеобходимо для того, чтобы убедиться, что передано не менее 2 имен файлов, grepпоэтому grepвсегда выводятся имена файлов, в которых найдены строки.

Обратите внимание, что если выбор БУФЕРА ОБМЕНА содержит более одной строки, каждая строка будет искаться отдельно. Например, если выбор содержит a<newline>b, будут выведены строки, содержащие aили b(или оба).

Для сопоставления a<newline>bвместо этого вы можете использовать pcregrepего многострочный режим:

pcregrep -rM "\Q$(xsel -b -o | sed 's/\\E/&\\&\\Q/g'; printf '\\E')" /path/to/folder

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