Как мне искать в нескольких файлах с помощью «кота»? [duplicate]

Я хочу найти в каталоге все файлы, содержащие совпадение, и когда он найдет совпадение, он покажет файл, в котором было найдено это совпадение.

пример

cat * | grep password: 

Здесь будут показаны все совпадения, у которых есть «пароль»:

Но он не показывает, к какому файлу принадлежит совпадение.

0
задан 23 July 2020 в 00:35

2 ответа

Using cat and grep to print out the names of files that contain the "password:" string within the current directory:

cat * 2>&- | grep -ls 'password:' *

With full file path:

cat * 2>&- | grep -ls 'password:' ${PWD}/*

2>&- is used to suppress error messages about being unable to read certain files/directories.


Using only grep to do the same thing:

grep -ls 'password:' *

With full file path:

grep -ls 'password:' ${PWD}/*


Using grep to pattern match for the "password:" string, printing the filename, then using cat to display the entire file(s) contents:

for match in $(grep -ls 'password:' *) ; do
    echo "${match}"
    cat "${match}"
done

With full file path:

for match in $(grep -ls 'password:' *) ; do
    echo -e "\e[7m\n$(readlink -f "${match}")\e[0m"
    cat "${match}"
done
-2
ответ дан 30 July 2020 в 22:04

Я думаю, что невозможно получить имена файлов после того, как вы передали результат cat , как в вашем примере, потому что команда cat просто объединит содержимое, информация об именах файлов исчезает после этого.

Вместо этого вы можете полагаться на поведение команды grep , когда она получает несколько входных файлов, тогда grep будет покажите имя файла для каждого совпадения.

Итак, вместо

cat * | grep password:

вы можете сделать это:

grep password: *
7
ответ дан 30 July 2020 в 22:04

Другие вопросы по тегам:

Похожие вопросы: