Софт

Утилиты sed и awk

sed awk linux
Sed и awk относятся к категории недооцениваемых Linux-утилит. Хотя на первый взгляд они могут показаться несколько сложными, если вам когда-либо необходимо было производить повторяющиеся изменения с вашим текстом или анализировать какой-либо текст, пользу Sed и Awk сложно переоценить.

Итак, кто они? Как они используются? И как, совместив их, можно легко анализировать текстовую информацию?

Что такое Sed?

Sed был разработан в 1971 году в Bell Labs легендарным пионером компьютеров Lee E. McMahon.

Название утилиты расшифровывается как «stream editor» - редактор потоков – и это то, что он делает. Она позволяет вам редактировать файлы или потоки текста автоматически с помощью компактного и простого, хотя и полного по Тьюрингу языка программирования.

Он работает очень просто: считывает текст в буфер построчно. Для каждой строчки, где это применимо, он будет выполнять заданные инструкции.

Например, если кто-то написал Sed-скрипт, который заменяет слово "beer" на "soda", а затем применил его к текстовому файлу, который содержал текст "99 Bottles of Beer on the Wall", он бы прошел по всем строчкам и в этой строчке заменил бы слова так, что она выглядела бы как "99 Bottles of Soda on the Wall" – и так далее.

Самый простой скрипт Sed – это Hello World. Здесь мы используем Unix-утилиту Echo, которая просто печатает строку, чтобы напечатать "Hello World". Но мы перенаправляем это в Sed и просим его заменить World на Dave.

echo "Hello World" | sed s/world/Dave

sedawk dave
Вы также можете комбинировать sed-инструкции в файлах, если вам нужно проводить какое-либо более усложненное редактирование. Например, я собираюсь взять песню Take On Me и заменить каждое вхождение "I", "Me" и "My" на Greg.

Во-первых, я помещу слова песни в текстовый файл под названием text.txt. Затем я открою свой предпочитаемый текстовый редактор (мой любимый – Vim, но Nano и Gedit – тоже отличный вариант) и добавлю туда следующие строчки. Убедитесь, что созданный вами файл заканчивается на .sed.
Вы можете заметить, что в примере выше я повторялся (например, s/me/Greg/ и s/Me/Greg/). Это сделано из-за того, что некоторые версии Sed, например, та, которая поставляется с Mac OS X, не поддерживает нечувствительность к синтаксису. Следовательно, нам приходится писать две sed-инструкции для каждого слова, чтобы утилита понимала различные варианты слова.

Это не работает идеально – можете подумать вы, потому что я вручную делал это для каждого слова. Но пока что мы просто используем это как упражнение для демонстрации того, как вы можете группировать Sed-инструкции в один скрипт, а затем выполнять их с помощью одной-единственной команды.

Затем нам нужно выполнить файл. Чтобы сделать это, выполним следующую команду:

cat tom.txt | sed -f greg.sed

Теперь остановимся и посмотрим, что делает эта команда. Некоторые читатели могут заметить, что здесь мы не используем echo, а используем cat. Это происходит потому, что cat напечатает полное содержимое файла, а echo – только имя файла. Вы также можете заметить, что мы запускаем Sed с флагом –f. Это позволяет sed открыть скрипт как файл.

Вот результат работы:

sed greg script

Также стоит заметить, что Sed поддерживает регулярные выражения (regex). Они позволяют вам определять шаблоны в тексте, используя особенный и сложный синтаксис.

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

cat tom.txt | sed /^Take/d
sed-regex-take

Sed, конечно, очень полезен. Но он даже еще более производителен, когда он скомбинирован с Awk.

Что такое Awk?

Awk, как и Sed – это язык программирования, созданный для работы с большими объемами текста. Но sed создан для обработки и редактирования текста, а awk в основном используется как инструмент для анализа и отчетов по тексту.

Как и sed, Awk был создан в семидесятых в Bell Labs. Его имя не содержит отсылку к функциям приложения, но, скорее, к фамилиям авторов - Alfred Aho, Peter Weinberger и Brian Kernaghan.

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

Но хотя Sed и Awk могут быть похожи по описанию, это два совершенно разных языка, разрабатывавшиеся под влиянием различных философий. Awk больше похож на некоторые обычные языки, вроде C, Python и Bash. В нем есть такие вещи, как функции, и C-подобное отношение к сущностям вроде итераций и переменных. Он больше похож на язык программирования.

Поэтому давайте попробуем его. Используя слова песни Take On Me, мы собираемся вывести все строчки длиной более двадцати символов.

awk ' length($0) > 80 ' tom.txt

awk length
Следующий пример был взят из официальной документации Awk. Это отличный пример потенциала этого производительного, хотя и крохотного языка. Это также является отличной демонстрацией того, как работают итерации и переменные в этом языке. Для начала давайте создадим файл под названием "WordCount.awk" и добавим в него следующие строчки.

{
for (i = 1; i <= NF; i++)
freq[$i]++
}
END {
for (word in freq)
printf "%s\t%d\n", word, freq[word]
}


Сохраните его и выполните с помощью следующей команды:

awk -f WordCount.awk tom.txt

awk wordcount
Здорово, верно? Возможно, вы заметите, что они не отсортированы. Вы можете отсортировать результата, используя Unix-утилиту sort, но мы оставим это на одну из следующих статей.

Комбинирование двух утилит

Awk и Sed очень производительны при их сочетании. Вы можете сделать, разделяя команды при помощи символа |.

Давайте попробуем сделать это: мы попытаемся перечислить все строчки в Take On Me, содержащие больше 20 символов, используя Awk. Затем мы уберем все строчки, которые начинаются с Take. Вместе это будет выглядеть как-то так:

awk 'length($0)>20' tom.txt | sed /^Take/d

И производить следующий вывод:

awk

Теперь давайте еще больше улучшим это. Мы удалим все строчки, которые начинаются с Take, и отправим их в Awk, где мы посчитаем, сколько раз встречается каждое слово. Это выглядит примерно так:

cat tom.txt | sed /^Take/d | awk -f WordCount.awk

awk
Мощь sed и awk

Мало что можно объяснить в одной небольшой статье. Но я надеюсь, что я проиллюстрировал то, какими неоспоримо производителями являютяс Sed и Awk.

Итак, зачем вам это нужно? Sed и awk отлично подходят, например, для обработки лог-файлов. Это особенно полезно, когда вы пытаетесь найти проблему на своем сервере, или смотрите логи доступа для того, чтобы понять, как кому-то удалось взломать его.

А как вы используете sed и awk? Вы считаете эти утилиты полезными?

Комментарии   

 
0 #2 Winnie 16.05.2017 10:21
We are a gaggle of volunteers and starting a
new scheme in our community. Your site offered us with useful info to work on. You've done an impressive task and our whole community can be thankful to
you.

My website - foot measured correctly (debbiefinger.jimdo.com: http://debbiefinger.jimdo.com/2014/03/12/plantar-fasciitis-explained)
Цитировать
 
 
0 #1 OLG 27.12.2015 14:25
А чем Perl хуже.Всё то-же, только легче и мощнее. Ведь Perl и создан в качестве замены Sed и awk. Он также входит в состав Linux.
Цитировать
 

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


Защитный код
Обновить

Аккаунт




Мы в соц. сетях






Подпишись на нашу RSS

Новости Hi-Tech

Как избавиться от уведомлений в браузере

Очень часто при просмотре web-страниц выскакивают сообщения рекламного характера, которые сильно раздражают и сбивают с толку. Если вы входите в число этих людей, то должны знать, как отключить уведомления в...

Что нового в юбилейной версии браузера F…

На днях стал доступным релиз обновленного веб-браузера от Mozilla. Представленный Firefox 50 выпущен в версиях для десктопов с популярными операционными системами, а также для мобильных устройств, работающих на Android. Одним...

Ремонт ноутбуков - выбираем сервис

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

Как выбрать чехол для мобильного телефон…

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

Go to top