2014-02-18 3 views
1

Мое требование - искать журналы и находить определенную запись. Файлы журналов расположены на двух разных дорожках. И я хочу искать в обоих.Unix: поиск слова в файлах, расположенных на разных путях

Обычно я войти в сервер, перейти на путь и выполнить Grep -i слово * имя файла *

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

+0

это должно помочь http://stackoverflow.com/questions/16956810/finding-all-files-containing-a-text-string-in-linux –

ответ

3

Вы можете искать, как много путей, как вы хотите:

grep -i "word" *filename* /some/other/path/*filename* 
+0

_as много путей, как вы want_ - до максимума оболочки длина командной строки. Достаточно легко добраться, если здесь много лог-файлов с '/ some/very/long/path/name/* files.log'. – jm666

0

Что-то, как это должно помочь

#!/bin/sh 
#Purpose: To find a given text in a file 
if [ -z "$3" ] 
then 
    echo Usage: $0 DirectoryToSearchIn testToSearch filePattern 
    exit 1 
fi 

find $1 -name '$3' | while read f 
do 
    cat "$f" | grep "$3" && echo "[in $f]" 
done 
0

С find и grep вы можете сделать это в течение нескольких каталогов (без Knowning каталог наименование до этого)

find /path/to/files -type f -name '*filename*' -exec grep -i word /dev/null {} \; 

Этот пример находит файлы, которые содержат filename (но может быть что угодно). Я также добавил образец пути, но вы можете использовать ., чтобы начать поиск в текущих каталогах. -type f возвращает файлы (а не каталоги).

ИЛИ вы можете использовать рекурсивный grep, как указано here.

grep -rnw 'directory' -e "*filename*" 
+1

вы должны изменить 'grep -i word {} \;' на '-exec grep -i word/dev/null {} \;' (т. Е. Добавить «-exec», а также предоставить дополнительный (пустой) файл для grep, чтобы он выдал имя файла, в котором он нашел вхождения «слова».) Это переносимый способ (т. е. не использовать дополнительные опции GNU grep, чтобы всегда отображать имя файла) –

Смежные вопросы