@Valeriu147

Как найти несколько слов в нескольких файлах при помощи BASH?

Есть такой скрипт:

#!/bin/bash

text="hulk hogan,dolph ziggler"
IFS=","
word=( $text )

line=`ls workdir/*.txt`
unset IFS

for a in "${word[@]}"; do
for m in $line; do
if grep -q "$a" "$m"; then
    echo "$a word is exists"
    grep "$a" "$m"
else
    echo "$a word does not exists"
    exit 1
fi
done
done


Я ищу hulk hogan,dolph ziggler в нескольких файлах. Если они есть, скрипт пропустит, сказав, что строка такая-то есть в файле таком-то. Но оно ищет целиком два эти слова в каждом файле. Т.е., если в одном файле оно не найдет, по крайней мере одно из слов, оно выйдет из тела скрипта. Я же хочу, что бы оно выдавало исключение, если одного из слов нету во всех файлах. А если например hulk hogan есть в файле first.txt, а dolph ziggler, есть в second.txt, то скрипт должен отрабатывать, а не выходить из своего тела.
Сейчас, он ищет в каждом файле два слова, и если в одном из файлов не будет хотя бы одного из этих слов, он выйдет из тела скрипта, а это немного не подходит. Подскажите пожалуйста. Уже не знаю что и делать.
  • Вопрос задан
  • 471 просмотр
Пригласить эксперта
Ответы на вопрос 2
mxms
@mxms
IT voodoo
Вообще это делается в одну строку при помощи find.
find /path/to/find/*.txt -exec egrep -il '(hulk hogan|dolph ziggler)' {} \;

На выходе список файлов где содержится любая из искомых строк.
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
Вообще-то это делается в одну команду:

grep -r -P "(hulk|hogan|dolph|ziggler)" *.txt
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы