Canalizando o termo de pesquisa da área de transferência (não do nome do arquivo) para o grep para pesquisar uma pasta

Canalizando o termo de pesquisa da área de transferência (não do nome do arquivo) para o grep para pesquisar uma pasta

Estou tentando usar xsela área de transferência para canalizar o termo de pesquisa para greppesquisar em uma pasta cheia de arquivos txt. Alguém pode sugerir um método para fazer isso.

Responder1

Com grepimplementações que suportam -ra opção recursiva grep:

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

Para outras grepimplementações, use findpara procurar os arquivos:

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

O /dev/nullobjetivo é garantir que pelo menos 2 nomes de arquivo sejam passados, para grepque grepsempre imprima o nome dos arquivos nos quais as strings são encontradas.

Observe que se a seleção CLIPBOARD contiver mais de uma linha, cada linha será pesquisada separadamente. Por exemplo, se a seleção contiver a<newline>b, ela reportará linhas que contêm aou b(ou ambos).

Para combinar a<newline>b, você pode usar pcregrepo modo multilinha:

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

informação relacionada