Как: Проверить Содержится ли Строка в Файле

Иногда, существует необходимость, проверить наличие шаблона в файле и затем действовать в зависимости от результата.

Это можно сделать с помощью ‘статуса завершения команды’. Каждая команда в 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...

One Reply to “Как: Проверить Содержится ли Строка в Файле”

  1. NIce tutorial! Thanks for sharing.

Добавить комментарий