Eu tenho um grande conjunto de arquivos em um diretório. Os arquivos contêm texto arbitrário.
Eu quero procurar o nome do arquivo dentro desse texto de arquivo específico. Para esclarecer, eu tenho file1.py.txt
(sim, dois pontos .py.txt
) e file2.py.txt
ambos contém textos. Eu quero procurar a existência da string @code prefix.file1.py
dentro file1.py.txt
e a string @code prefix.file2.py
dentrofile2.py.txt
Como posso personalizar grep
para que ele passe por todos os arquivos do diretório, pesquise a string em cada arquivo usando esse nome de arquivo específico?
EDITAR:
A saída que estou procurando está escrita em um arquivo separado, result.txt
que contém: nome do arquivo (se uma correspondência for encontrada), o texto da linha (onde a correspondência for encontrada)
Com GNU
awk
:Relataria as linhas correspondentes.
Para imprimir o nome do arquivo e a linha correspondente, mude
index($0, search)
paraOu para imprimir apenas o nome do arquivo:
Substitua
FILENAME
porsubstr(FILENAME, 3)
para pular a saída do./
prefixo.A lista de arquivos é classificada lexicalmente. Aqueles cujo nome começa com
.
são ignorados (alguns shells têm adotglob
opção de adicioná-los de volta; comzsh
, você também pode usar o(D)
qualificador glob).É necessário grep cada arquivo encontrado.
-l
instruigrep
a imprimir o nome do arquivo somente quando oregex
for encontrado.Se os nomes dos arquivos não contiverem nenhum
/
caractere, tente isto:veja
man bash
os itens abaixo:"${fname##*/}"
éfile1.py.txt
, sefname
==a_directory/file1.py.txt
"${basename%.*}"
éfile1.py
, sebasename
==file1.py.txt