Реклама
Две из наиболее преступно недооцененных утилит Linux - Sed и Awk. Хотя по общему признанию они могут показаться немного загадочными, если вам когда-либо придется вносить повторяющиеся изменения в большие куски кода или текста, или если вам когда-либо придется анализировать какой-то текст, Sed и Awk неоценимы.
Итак, что они? Как они используются? И как, когда они объединены вместе, они облегчают обработку текста?
Что такое Сед?
Sed был разработан в 1971 году в Bell Labs, легендарный компьютерный пионер Ли Э. McMahon.
Название обозначает редактор потокови это то, что он делает. Позволяет редактировать тела или потоки текста программночерез компактный и простой, но полный по Тьюрингу язык программирования.
Это работает просто: он читает текст, построчно в буфер. Для каждой строки будут выполняться предопределенные инструкции, где это применимо.
Например, если кто-то должен был написать сценарий Sed, который заменил слово «beer» на «soda», а затем передал текстовый файл, содержащий всю текст песни «99 бутылок пива на стене», он просматривал этот файл построчно и распечатывал «99 бутылок содовой на стене», и так далее. на.
Самый простой скрипт Sed - это Hello World. Здесь мы используем утилиту Unix Echo, которая просто выводит строки, чтобы напечатать «Hello World». Но мы передаем это Седу и говорим заменить «Мир» на «Дейв». Самоочевидные вещи.
эхо "Hello World" | SED S / World / Dave

Вы также можете объединить инструкции Sed в файлы, если вам нужно выполнить более сложное редактирование. Вдохновлен эта веселая нить RedditЯ собираюсь взять текст песни для A-Ha Возьми меняи замените каждый экземпляр «Я», «Я» и «Мой» Грегом.
Сначала я помещу текст песни в текстовый файл tom.txt. Затем я открою свой предпочтительный текстовый редактор (мой любимый это Vim 7 главных причин дать текстовому редактору Vim шансВ течение многих лет я пробовал один текстовый редактор за другим. Вы называете это, я попробовал это. Я использовал каждый из этих редакторов более двух месяцев в качестве основного ежедневного редактора. Почему-то я ... Читать далее , но Nano нано против vim: сравнение текстовых редакторов терминаловНесмотря на то, что Linux стал достаточно легким для использования практически любым человеком без использования Терминала, некоторые из нас регулярно его используют или интересуются, как можно контролировать ... Читать далее а также Gedit gedit: один из наиболее полнофункциональных текстовых редакторов [Linux & Windows]Когда вы думаете о текстовых редакторах, первое, что может прийти вам в голову, - это приложение Windows Notepad. Он делает именно то, что говорится в его описании работы - простые функции для простого текста ... Читать далее оба отличных выбора), и добавьте следующие строки. Убедитесь, что файл, который вы создаете, заканчивается .sed.

Вы можете заметить, что в приведенном выше примере я повторился (например, s / me / Greg / и s / Me / Greg /). Это потому, что некоторые версии Sed, такие как та, которая поставляется с Mac OS X, делают не поддержка без учета регистра соответствия. В результате мы должны написать две инструкции Sed для каждого слова, чтобы он распознавал заглавную и некапитализированную версию.
Это не будет работать идеально, как будто вы заменили каждый экземпляр «Я», «Я» и «Мой» вручную. Помните, мы просто используем это как упражнение, чтобы продемонстрировать, как вы можете сгруппировать инструкции Sed в один скрипт, а затем выполнить их с помощью одной команды.
Затем нам нужно вызвать файл. Для этого мы запускаем эту команду.
кот tom.txt | sed -f greg.sed
Давайте помедленнее и посмотрим, что это делает. Зоркие читатели заметят, что мы не используя Echo здесь. Мы используем Cat. Это потому, что хотя Cat будет распечатывать все содержимое файла, echo будет распечатывать только имя файла. Вы также заметили, что мы запускаем Sed с флагом «-f». Это говорит об открытии сценария в виде файла.
Конечный результат таков.

Стоит также отметить, что Sed поддерживает регулярные выражения (REGEX). Это позволяет вам определять шаблоны в тексте, используя специальный и сложный синтаксис.
Вот пример того, как это может работать. Мы собираемся взять вышеупомянутые тексты песен, но с помощью регулярных выражений распечатать каждую строку, которая не начать с «взять».
кот tom.txt | sed / ^ Take / d

Сед, конечно, невероятно полезен. Но он еще более мощный в сочетании с Awk.
Что такое Awk?
AwkКак и Sed, это язык программирования, предназначенный для работы с большими объемами текста. Но в то время как Sed используется для обработки и изменения текста, Awk в основном используется как инструмент для анализ а также составление отчетов.
Как и Сед, Awk был впервые разработан в Bell Labs в 1970-х годах. Его название не происходит от того, что программа делает, а точнее фамилии каждого из авторов - Альфред Ахо, Питер Вайнбергер и Брайан Кернаган.
Awk работает, читая текстовый файл или входной поток по одной строке за раз. Каждая строка сканируется, чтобы увидеть, соответствует ли она предопределенному шаблону. Если совпадение найдено, действие выполняется.
Но хотя Sed и Awk могут иметь схожие цели, это два совершенно разных языка с двумя совершенно разными философиями дизайна. Awk более близко напоминает некоторые языки общего назначения Как выбрать язык программирования, чтобы учиться сегодня и получить отличную работу за 2 годаЧтобы стать действительно хорошим программистом, могут потребоваться годы самоотверженной работы; так есть ли способ выбрать правильный язык, чтобы начать с сегодняшнего дня, чтобы получить работу завтра? Читать далее , как C, Python и Bash. У него есть такие вещи, как функции, и более C-подобный подход к вещам, таким как итерация и переменные объяснил, как работает итерация Абсолютные основы программирования для начинающих (часть 2)Во второй части нашего абсолютного руководства по программированию для начинающих я расскажу об основах функций, возвращаемых значениях, циклах и условных выражениях. Убедитесь, что вы прочитали часть 1, прежде чем заняться этим, где я объяснил ... Читать далее ). Проще говоря, это больше похоже на язык программирования.
Итак, давайте попробуем. Используя текст песни Take On Me, мы напечатаем все строки длиной более 20 символов.
длина awk '($ 0)> 80' tom.txt
Следующий пример, который я бесстыдно извлечен из официальная документация Awk. Но это отличный пример потенциала этого мощного, но крошечного языка. Это также отличная демонстрация того, как в нем работают такие вещи, как итерации и переменные. Сначала создайте файл с именем «WordCount.awk» и добавьте следующие строки.
{для (я = 1; я <= NF; i ++) freq [$ i] ++ }
END {for (слово в частоте) printf "% s \ t% d \ n", слово, частота [слово] }
Сохраните его, а затем запустите с помощью следующей команды.
awk -f WordCount.awk tom.txt
Круто, верно? Вы, вероятно, заметите, что они не в каком-либо порядке. Вы Можно сортировать результаты с помощью утилиты сортировки Unix. Но мы оставим это на другой день. Мы собираемся сделать это простым.
Объединяя Два
Awk и Sed оба невероятно мощны в сочетании. Вы можете сделать это, используя каналы Unix. Это «|» биты между командами.
Давайте попробуем это: мы собираемся перечислить все строки в Take On Me, которые имеют более 20 символов, используя Awk. Затем мы собираемся убрать все строки, которые начинаются с «Принять». Вместе все это выглядит так:
awk 'длина ($ 0)> 20' tom.txt | sed / ^ Take / d
И производит это:

Теперь давайте перевернем это. Мы собираемся начать с удаления всех строк, начинающихся с Take, и затем направить их в Awk, где мы посчитаем, сколько раз появляется каждое слово. Это выглядит примерно так:
кот tom.txt | sed / ^ Take / d | awk -f WordCount.awk

Сила Седа и Пробуждения
Есть только так много, что вы можете объяснить в одной статье. Но я надеюсь, что проиллюстрировал, насколько безмерно сильны Сед и Аук. Проще говоря, они локомотив обработки текста.
Итак, почему вы должны заботиться? Ну, кроме того, что вы никогда не знаете, когда вам нужно делать предсказуемые, повторяющиеся изменения в текстовом документе, Sed и Awk отлично подходят для анализа файлов журналов. Это особенно удобно, когда вы пытаетесь отладить проблему в вашем сервере LAMP Зарегистрироваться на SSH-только веб-хостинг? Не беспокойтесь - легко установите любое веб-программное обеспечениеНе знаете в первую очередь об использовании Linux через его мощную командную строку? Не беспокойся больше. Читать далее или просматривая ваши журналы доступа, чтобы увидеть, был ли ваш сервер взломан.
Вы нашли интересное использование для Sed и Awk? Есть ли какие-либо другие утилиты Linux, которые вы считаете недооцененными? Дайте мне знать в комментариях ниже, и мы будем общаться.
Мэтью Хьюз - разработчик программного обеспечения и писатель из Ливерпуля, Англия. Его редко можно найти без чашки крепкого черного кофе в руке, и он абсолютно обожает свой Macbook Pro и свою камеру. Вы можете прочитать его блог на http://www.matthewhughes.co.uk и следуйте за ним в твиттере на @matthewhughes.