Grep - важная команда в Linux.
Рассмотрим, почему эту команду важно освоить, и как ее можно использовать в повседневных задачах в командной строке.
Давайте углубимся в некоторые объяснения и примеры.
Почему мы используем grep?
Grep - это инструмент командной строки, который пользователи Linux используют для поиска текстовых строк. Вы можете использовать его для поиска файла по определенному слову или комбинации слов, или вы можете направить вывод других команд Linux в grep, так что grep может показать вам только тот вывод, который вам нужен.
Давайте посмотрим на некоторые действительно распространенные примеры. Скажем, вам нужно проверить содержимое каталога, чтобы увидеть, существует ли там определенный файл. Это то, для чего вы бы использовали команду «ls».
Но чтобы ускорить весь процесс проверки содержимого каталога, вы можете направить вывод команды ls в команду grep. Давайте посмотрим в нашем домашнем каталоге папку с названием Documents.
$ ls
Desktop Drafts Ваше_имя 'My files' Samples
Documents examples.desktop Linux Pictures Templates
Downloads Favorites Music Public Videos
А теперь давайте попробуем проверить каталог снова, но на этот раз, используя grep, специально для проверки папки «Документы».
$ ls | grep Documents
Documents
Как вы можете видеть на скриншоте выше, использование команды grep сэкономило нам время, быстро изолировав искомое слово от остальной части ненужного вывода, созданного командой ls.
Если папка Documents не существует, grep не вернет ничего. Поэтому, если ничего не возвращает grep, это означает, что он не может найти слово, которое вы ищете.
Найти строку
Если вам нужно искать строку текста, а не просто одно слово, вам нужно заключить строку в кавычки. Например, что, если нам нужно было искать каталог «Мои документы» вместо простого каталога «Документы»?
$ ls | grep 'My Documents'
Grep будет принимать как одинарные, так и двойные кавычки, поэтому оберните текстовую строку любой из них.
Хотя grep часто используется для поиска выходных данных из других инструментов командной строки, вы также можете использовать его для прямого поиска документов. Вот пример, где мы ищем текстовый документ для строки.
$ grep 'Class 1' Students.txt
$ grep 'Todd' Students.txt
Найти несколько строк
Вы также можете использовать grep, чтобы найти несколько слов или строк. Вы можете указать несколько шаблонов, используя ключ -e. Давайте попробуем поискать в текстовом документе две разные строки:
$ grep -e 'Class 1' -e Todd Students.txt
Обратите внимание, что нам нужно было использовать только кавычки вокруг строк и пробелы.
Разница между grep, egrep, fgrep, pgrep, zgrep
Различные переключатели grep исторически были включены в различные двоичные файлы. В современных системах Linux вы найдете эти переключатели доступными в команде base grep, но часто дистрибутивы поддерживают и другие команды.
Со страницы руководства для grep:
egrep является эквивалентом grep -E
Этот переключатель будет интерпретировать шаблон как расширенное регулярное выражение . Есть множество разных вещей, которые вы можете сделать с этим, но вот пример того, как выглядит использование регулярного выражения с grep.
Давайте найдем в текстовом документе строки, которые содержат две последовательные буквы «р»:
$ egrep p\{2} fruits.txt
или
$ grep -E p\{2} fruits.txt
fgrep является эквивалентом grep -F
Этот переключатель будет интерпретировать шаблон как список фиксированных строк и попытаться сопоставить любую из них. Это полезно, когда вам нужно искать символы регулярного выражения. Это означает, что вам не нужно экранировать специальные символы, как если бы вы использовали обычный grep.
$ fgrep $ License.txt
There is a $100 free for commercial use.
pgrep - это команда для поиска имени запущенного процесса в вашей системе и возврата соответствующих идентификаторов процесса. Например, вы можете использовать его, чтобы найти идентификатор процесса демона SSH:
$ pgrep sshd
По функциям это похоже на простую передачу вывода команды 'ps' в grep.
Вы можете использовать эту информацию, чтобы убить работающий процесс или устранить проблемы со службами, работающими в вашей системе.
zgrep используется для поиска сжатых файлов по шаблону. Это позволяет вам искать файлы внутри сжатого архива без необходимости сначала распаковывать этот архив, в основном экономя вам дополнительный шаг или два.
$ zgrep apple fruits.txt.gz
zgrep также работает с tar-файлами, но кажется, что он говорит только о том, удалось ли найти совпадение.
$ zgrep apple fruits.tar.gz
Мы упоминаем об этом, потому что файлы, сжатые с помощью gzip, обычно являются архивами tar.
Разница между find и grep
Для тех, кто только начинает работать с командной строкой Linux, важно помнить, что find и grep - это две команды с двумя совершенно разными функциями, хотя обе они используются для «поиска» чего-то, что указывает пользователь.
Удобно использовать grep для поиска файла, когда вы используете его для поиска в выводе команды ls, как показано в первых примерах.
Однако, если вам нужен рекурсивный поиск имени файла - или части имени файла, можно использовать «find».
$ find /path/to/search -name name-of-file
Поиск рекурсивно
Вы можете использовать ключ -r с grep для рекурсивного поиска по всем файлам в каталоге и его подкаталогах по указанному шаблону.
$ grep -r pattern /directory/to/search
Если вы не укажете каталог, grep будет просто искать ваш текущий рабочий каталог. На приведенном ниже снимке экрана grep обнаружил два файла, соответствующих нашему шаблону, и возвращает их имена файлов и каталог, в котором они находятся.
Найти вкладку
Как мы упоминали ранее в объяснении того, как искать строку, вы можете заключить текст в кавычки, если он содержит пробелы. Тот же метод будет работать для вкладок, но мы сейчас объясним, как поместить вкладку в вашу команду grep.
Поставьте пробел или несколько пробелов внутри кавычек, чтобы grep искал этот символ.
$ grep " " sample.txt
Существует несколько различных способов поиска вкладки с помощью grep, но большинство методов являются экспериментальными или могут быть несовместимыми в разных дистрибутивах.
Самый простой способ - просто найти сам символ табуляции, который вы можете создать, нажав Ctrl + V на клавиатуре, после чего нажмите Tab.
Обычно нажатие клавиши tab в окне терминала говорит терминалу, что вы хотите автоматически завершить команду, но предварительное нажатие комбинации ctrl + v приведет к тому, что символ табуляции будет записан так, как вы обычно ожидаете в текстовом редакторе. ,
$ grep " " sample.txt
Знание этого небольшого трюка особенно полезно при поиске файлов конфигурации в Linux, поскольку вкладки часто используются для отделения команд от их значений.