Команда grep. Поиск в тексте

Последнее обновление: 12.03.2024

Команда grep выполняет поиск в файле с использованием регулярных выражений. Она имеет следующий формат:

grep [OPTIONS] PATTERNS [FILE]

В качестве обязательного аргумента PATTERNS она принимает шаблон текста, который надо найти. Если команде передан аргумент FILE, то он используется в качестве файла для поиска текста. И необязательный параметр OPTIONS позволяет настроить применение шаблона для поиска текста.

Например, найдем текст "127.0." в файле /etc/hosts:

eugene@Eugene:~$ grep "127.0." /etc/hosts
127.0.0.1 localhost
127.0.1.1 Eugene

Другой пример - найдем в домашнем каталоге пользователя папки и файлы, названия которых начинаются на "Do":

eugene@Eugene:~$ ls ~ | grep "Do"
Documents
Downloads

Основные элементы регулярных выражений:

  • ^: указывает, что соответствие шаблону должно находиться в начале строки. Например, найдем строки, которые начинаются на символ "s":

    eugene@Eugene:~$ ls ~ | grep "^s"
    shell
    snap
    
  • $: указывает, что соответствие шаблону должно находиться в конце строки. Например, найдем все файлы с расширением "txt":

    ls ~ | grep "\.txt$"
  • .: соответствует любому символу. Например, пусть в домашнем каталоге пользователя у нас есть следующий файл test.txt

    Tom
    Bob
    Sam
    Alice
    Kate
    Tim
    Tomas
    

    Найдем все строки, которые содержат "Tim" или "Tom":

    eugene@Eugene:~$ grep "T.m" test.txt
    Tom 
    Tim 
    Tomas
    
  • []: указывает символы в регулярном выражении, которые следует интерпретировать как альтернативы. Например, найдем все строки, которые содержат "Tum" или "Tom":

    grep "T[ou]m" test.txt
  • [^ ]: игнорирует все символы после знака ^. Например, найдем все строки, которые НЕ содержат "Tum" или "Tom":

    grep "T[^ou]m" test.txt
  • -: определяет диапазон символов, которому должен соответствовать символ. Например, найдем все строки, которые начинаются с цифрового символа:

    grep "^0-9" test.txt
  • \: позволяет экранировать спец. символы. Например, символ точки . рассматривается как заменитель произвольного символа. Но если нам надо указать, что текст должен содержать именно точку как стандартный символ, то нам надо использовать "\.". Например, найдем в папке загрузок все файлы, которые имеют расширение tar.gz:

    ls ~/Downloads | grep "\.tar\.gz"
    
  • *: указывает, что предыдущее регулярное выражение может встречаться один раз, несколько раз или не встречаться вообще

  • ?: указывает, что предыдущее регулярное выражение может встречаться один раз или может отсутствовать

  • +: указывает, что предыдущее регулярное выражение может встречаться один или более раз

  • \{n\}: указывает, что предыдущий символ может встречаться как минимум n раз. Например, найдем строки, где есть два буквы o подряд:

    grep "o\{2\}" test.txt
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850