web-dev-qa-db-ja.com

検索語をクリップボード(ファイル名ではなく)からgrepにパイプして、フォルダーを検索する

xselクリップボードを使用して検索語をgrepにパイプし、txtファイルでいっぱいのフォルダーを検索しようとしています。誰かがそれを行う方法を提案できますか?.

3
Ramaprakasha

再帰的な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は常に文字列が含まれるファイルの名前を出力します。

CLIPBOARD選択に複数の行が含まれている場合、各行は個別に検索されることに注意してください。たとえば、選択範囲に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
3