Иногда, существует необходимость, проверить наличие шаблона в файле и затем действовать в зависимости от результата.
Это можно сделать с помощью ‘статуса завершения команды’. Каждая команда в Linux, возвращает свой статус, когда она выполняется успешно или не успешно.
Мы можем использовать ‘статус завершения команды’ в shell скриптах для отображения сообщений об ошибке или для выполнения каких-либо других действий.
Синтаксис
grep -q [ШАБЛОН] [ФАЙЛ] && echo $?
- Код завершения соответствует 0 (правда) если строка, содержащая шаблон, найдена;
- Код завершения соответствует 1 (ложь) если строка, содержащая шаблон, НЕ найдена.
Примеры
Вот некоторые примеры, в которых мы проверим присутствуют ли в файле строки, содержащие заданный шаблон.
Пример 1:
Следующий пример показывает что шаблон ‘SOME_PATTERN’ был найден в файле ‘SOME_FILE’.
grep -q 'SOME_PATTERN' 'SOME_FILE' && echo $? 0
Пример 2:
А этот пример показывает что шаблон ‘ANOTHER_ONE_PATTERN’ не был найден в файле ‘SOME_FILE’.
grep -q "ANOTHER_ONE_PATTERN" SOME_FILE && echo $? 1
Пример 3:
Проверяем существует ли строка, и выводим сообщение об ошибке, если ее не существует.
grep -q 'PATTERN' 'FILE' || echo "Error: The Pattern Does Not Exist";
Результат:
Error: The Pattern Does Not Exist
BASH Скрипт
Проверим наличие шаблона в файле. Если он присутствует, напечатаем все строки в которых содержится наш шаблон. Если такого шаблона нет в файле, выведем сообщение об ошибке и остановим выполнение скрипта.
#!/bin/bash PATTERN=$1 FILE=$2 if grep -q $PATTERN $FILE; then echo "Here are the Strings with the Pattern '$PATTERN':" echo -e "$(grep $PATTERN $FILE)\n" else echo "Error: The Pattern '$PATTERN' was NOT Found in '$FILE'" echo "Exiting..." exit 0 fi
Сохраним, добавим права на выполнение и запустим скрипт:
chmod +x script.sh ./script.sh root /etc/passwd Here are the Strings with the Pattern 'root': root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin ./script.sh John /etc/passwd Error: The Pattern 'John' was NOT Found in '/etc/passwd' Exiting...
NIce tutorial! Thanks for sharing.
How to check for certain special characters present in a file?
Like, My file contains «———-«. I need to know the existence of them in the file. How to search for it.
grep «—*—» filename didn’t workout.
Thanks in advance.
You need to replace && by ; if you want a result in case of nothing found by grep.
Because && is only executed if previous instruction returns true