Grep: возвращать пользовательское сообщение, когда нет попаданий - PullRequest
1 голос
/ 14 июня 2011

У меня есть файлы ASCII для анализа 48 или более часов;Я могу идентифицировать их так:

find . -name "FILE*TXT"  -mtime +1 -exec ls -ltas '{}' ';' 

В некоторых файлах есть список аппаратных ошибок (мы тестируем электронные компоненты), в некоторых - нет.Если имя файла не содержит ошибок, я все еще хочу отобразить сообщение, подобное этому

    grep ^err R*VER && echo "No error"
FILEA.TXT:err   ->USB   3910    err 
FILED.TXT:err No Error

Этот оператор grep работает, но, по-видимому, он переопределяет приведенный выше оператор find (), если я запускаю оба одновременно ...Как я могу объединить два оператора, чтобы создать отчет, в котором перечислены имя файла и ошибки, например,

FILEA.TXT Button    3320    err
FILEB.TXT USB   3235    err
FILEC.TXT IR Remote 2436    err
FILED.TXT No error

Можно ли вернуть «Нет ошибок» с именем файла без ошибок?Заранее спасибо за помощь.

Ответы [ 2 ]

6 голосов
/ 14 июня 2011

Предикат -exec возвращает false, если команда возвращает ошибку.

find ... \( -exec grep ... {} \; -o -printf "%p No error\n" \) ...
0 голосов
/ 14 июня 2011

Друг придумал это

find . -name "FILE*TXT" -mtime +1 -exec sh -c 'grep -H ^err "{}" || echo "{}:No error"' \;

Я не мог понять, как запустить grep для каждого файла; его решение делает именно это.

Спасибо, что нашли время.

...