Возможный дубликат:
Как совместить поиск и grep для сложного поиска? (GNU / Linux, найти, grep)
У меня есть иерархия каталогов файлов (некоторые из которых являются открытым текстом, а другие - двоичными).
Существует ли простой способ рекурсивного поиска в иерархии файлов и каталогов по именам любых файлов, содержащих указанную строку, и распечатку списка "пути к имени файла и номеру строки", если это возможно?
По сути, то, что я хочу, более или менее совпадает со следующим, за исключением, возможно, возможности печати номеров строк:
#!/bin/bash
#
# Recursively search files for pattern specified as argument.
#
pattern="$1"
if [ -z "$pattern" ]; then echo "$0: Unspecified pattern."; exit; fi
searchfiles () {
for filename in *; do
if [ -f "$filename" ]; then {
result=`/bin/grep -e "$pattern" "$filename"`
if ! [ -z "$result" ]; then echo "File: `pwd`/$filename"; fi
}
elif [ -d "$filename" ]; then
cd "$filename"
searchfiles
cd ..
fi
done
}
searchfiles
Хорошо, как предложено ниже, я мог бы использовать рекурсивный grep, но мне нужно только имя файла и номер строки, так как печать его содержимого может быть грязной, если есть много длинных длинных строк, которые затем оборачиваются вокруг терминала при печати, так что вот мое решение :
grep -Rn index.php * | sed -e 's/ .*//g'
С Уважением,
Джон Гош