Какая разница между командами GREP, AWK и SED

Мы не можем с уверенностью называть себя экспертами по управлению файлами Linux, не обладая навыками обработки текста. Три самых известных инструмента командной строки (grep, sed и awk) заслужили хорошую репутацию текстовых процессоров Linux. Они предустановлены во всех основных дистрибутивах операционных систем Linux, поэтому нет необходимости устанавливать их дополнительно.

Каждая команда grep, sed и awk имеет уникальные функции обработки текста, но в некоторых простых сценариях их функции могут быть аналогичными.

Например, все эти три команды могут легко проверить совпадения шаблона файла и отправить результаты запроса на вывод.

В этой статье является разберемся чем отличаются эти команды и в каких случаях использовать ту или иную команду.

Постановка задачи.

Для создания большей информативности и понятности, давайте определим образец текстового файла, на который мы будем ссылаться. Рассмотрим следующий созданный текстовый файл с именем SysLog.txt, в котором указаны различные системные действия на основе отметки времени.

Команда grep.

По определению, команда grep находит и печатает текст из файла на основе шаблона регулярного выражения. Это быстрое решение для получение или определения строки в целевом файле.

Синтаксис команды следующий:

В приведенном выше синтаксисе PATTERNS обозначают шаблон регулярного выражения, определенный пользователем, на который будет ссылаться команда grep.

Поиск соответствия шаблону регулярного выражения.

Допустим из файла, который мы создали ранее, мы хотим выделить все события ERROR, наша команда grep будет выглядеть следующим образом:

Команда grep выполнит поиск любого появления строки ERROR в файле SysLog.txt перед выводом результатов на стандартный вывод.

Инвертирование поиска.

Предположим, мы хотим, чтобы были напечатаны все строки файла, кроме той, которая указана в команде grep. В этом случае используется опция -v.

Печать предыдущих/последующих строк.

Чтобы напечатать 4 строки после совпадения строки ERROR:

Для печати 4 строк до совпадения строки ERROR:

Чтобы напечатать 3 строки до и после совпадения строки ERROR:

Команда «sed».

Команда sed имеет преимущество перед grep благодаря дополнительным функциям обработки текста.

Ее синтаксис следующий:

Использование sed как grep.

Эквивалент команды grep для поиска и печати записей файла, связанных со строкой ERROR, выглядит следующим образом:

Опция -n запрещает sed печатать каждую отсканированную строку.

Замена совпавшей строки.

Предположим, мы хотим заменить строку ERROR на строку CRITICAL в нашем текстовом файле, реализация команды sed будет выглядеть следующим образом:

Изменение файлов.

Использование флага -i вместе с определяемым пользователем суффиксом позволяет sed создать резервную копию входного файла перед применением постоянных изменений.

Например, мы можем переименовать строку CRITICAL обратно в ERROR только после создания резервной копии исходного состояния файла.

Исходный файл будет переименован в резервную копию SysLog.txt.

Мы также можем убедиться с помощью команды cat, что изменения файла произошли:

Ограничение изменений sed определенным номером строки.

Чтобы ограничить операции sed строкой номер 6 текстового файла, можно использовать следующую команду:

Для указания диапазона от 2 до 4, выполните:

Чтобы напечатать совпадения с шаблоном, начиная с определенной строки, например, строки 5, выполните:

Команда awk.

Команду awk можно использовать для выполнения операций со временем, арифметических операций и манипуляций со строками благодаря множеству встроенных функций. Кроме того, пользователям разрешено определять свои настраиваемые функции.

Синтаксис команды следующий:

Использование awk как grep

awk-эквивалент команды grep для поиска строки в файле выглядит следующим образом:

Замена совпадающей строки

Команда awk использует gsub (встроенный метод) для операций замены строк.

Добавление верхних и нижних колонтитулов.

Мы можем добавлять верхние и нижние колонтитулы во входные файлы, используя блоки BEGIN и END awk, как показано ниже:

Манипуляции со столбцами.

Для таких документов, как файлы CSV состоящими из строк и столбцов, мы можем указать только определенные столбцы для вывода. Например, выведем 1-й и 2-й столбец нашего файла.

Пользовательский разделитель полей.

По умолчанию, awk признает пробелы в качестве разделителей. Если в обрабатываемом тексте в качестве разделителей используются такие символы, как запятые или точки с запятой, вы можете указать их следующим образом:

Арифметические операции

С помощью awk можно подсчитать количество появления определенных строк, следующим образом:

Числовое сравнение.

Сценарий awk удобно интерпретирует значения как числа, а не просто как строку. Например, мы могли бы получить записи файлов с временными метками старше 2597763777 следующим образом:

Заключение.

Теперь мы можем немного оценить сложность исплользования каждого из инструментов обработки текста. Для каждого случая, обычно используют ту команду, которая необходимо. Для себя, я сделал следующие выводы по использованию:

  • Если просто ищу какой-либо текст, содержащийся в файле, то я использую команду grep.
  • Если мне надо не просто найти текст, но и заменить его на другой в файле, то для этого я использую команду sed
  • Если мне надо обработать текст, или использовать сложные сценарии для поиска и отображения текста, то я использую awk.

Надеюсь, вам эта статья помогла тоже определиться, что и в каком случае использовать.

Was this helpful?

1 / 0

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