将搜索词从剪贴板(不是文件名)传送到 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始终打印在其中找到字符串的文件的名称。

请注意,如果 CLIPBOARD 选择包含多行,则将单独搜索每一行。例如,如果选择包含a<newline>b,它将报告包含ab(或两者)的行。

要进行匹配a<newline>b,您可以使用pcregrep其多行模式:

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

相关内容