реклама

Две от най-криминалните подценявани Linux услуги са Sed и Awk. Макар да се признават, те могат да изглеждат малко тайнствени, ако някога се налага да правите повтарящи се промени в големи парчета код или текст или ако някога трябва да анализирате някакъв текст, Sed и Awk са безценни.

И така, какви са те? Как се използват? И как, когато се комбинират заедно, улесняват обработката на текст?

Какво е Sed?

SED е разработен през 1971 г. в Bell Labs, от легендарния компютър пионер Лий Е. Макмеън.

Името означава редактор на потоци, и това е нещо, което прави. Тя ви позволява да редактирате тела или потоци от текст програмно, чрез компактен и прост, но все пак Turing-пълен език за програмиране.

Начинът на работа е прост: той чете текст, ред по ред в буфер. За всеки ред той ще изпълнява предварително зададените инструкции, когато е приложимо.

Например, ако някой трябваше да напише скрипт Sed, който замени думата „бира“ със „сода“, и след това премина в текстов файл, който съдържаше цялото текстове към „99 бутилки бира на стената“, тя ще преминава през този файл по ред и ще отпечатва „99 бутилки сода на стената“ и т.н. На.

instagram viewer

Най-основният сценарий Sed е Hello World. Тук използваме помощната програма Unix Echo, която просто извежда струни, за да отпечатаме „Hello World”. Но ние изпращаме това към Сед и му казваме да замени „Свят“ с „Дейв“. Разяснителни неща.

ехо "Здравей свят" | sed s / свят / Дейв
sedawk-Дейв

Можете също да комбинирате инструкциите за Sed във файлове, ако трябва да направите по-сложно редактиране. Вдъхновен от тази весела нишка Reddit, Ще заведа текстовете на A-Ha Вземи меи заменете всеки екземпляр от „Аз“, „Аз“ и „Моят“ с Грег.

Първо ще сложа текстовете към песента в текстов файл, наречен tom.txt. Тогава ще отворя предпочитания от мен текстов редактор (моя фаворит е Вим Най-важните 7 причини да дадете шанс на редактора на текстови текстове на VimОт години опитвам един текстов редактор след друг. Наричате го, опитах го. Използвах всеки един от тези редактори повече от два месеца като мой основен ежедневен редактор. Някак си ... Прочетете още , но Nano nano vs. vim: Сравнени текстови редактори на терминалаВъпреки че Linux е станал достатъчно лесен, за да може практически всеки да го използва, без изобщо да се налага да използва терминала, има някои от нас, които редовно го използват или са любопитни как човек може да контролира ... Прочетете още и Gedit gedit: Един от най-многофункционалните обикновени текстови редактори [Linux и Windows]Когато мислите за редактори за обикновен текст, първото нещо, което може да изскочи в главата ви, е приложението на Notepad за Windows. Той прави точно това, което гласи длъжностното му описание - обикновени функции за обикновен текст ... Прочетете още са отличен избор) и добавете следните редове. Уверете се, че файлът, който създавате, завършва .sed.

СЕД-Greg-СЕД

Може да забележите, че в примера по-горе аз се повтарях (например s / me / Greg / и s / Me / Greg /). Това е така, защото някои версии на Sed, като тази, която се доставя с Mac OS X, го правят не поддържане на несъвместимото от регистъра съвпадение. В резултат на това трябва да напишем по две инструкции на Sed за всяка дума, така че тя разпознава написаната с главни букви и некапифицирана версия.

Това няма да работи перфектно, сякаш сте сменили на ръка всеки екземпляр от „Аз“, „Аз“ и „Моят“. Не забравяйте, че ние просто използваме това като упражнение, за да демонстрираме как можете да групирате инструкциите на Sed в един скрипт и след това да ги изпълните с една команда.

След това трябва да извикаме файла. За целта изпълняваме тази команда.

котка tom.txt | sed -f greg.sed

Нека да се забавим и да разгледаме какво прави това. Читателите с орелски очи ще забележат, че сме не използвайки Echo тук. Използваме Cat. Това е така, защото докато Cat ще разпечата цялото съдържание на файла, ехото ще отпечата само името на файла. Също така ще забележите, че пускаме Sed със знака „-f“. Това му казва да отвори скрипта като файл.

Крайният резултат е това.

СЕД-Грег-скрипт

Също така си струва да се отбележи, че Sed поддържа регулярни изрази (REGEX). Те ви позволяват да дефинирате модели в текст, като използвате специален и сложен синтаксис.

Ето пример за това как това може да работи. Ще вземем гореспоменатите текстове на песни, но използвайте regex, за да отпечатвате всеки ред не започнете с „Вземете“.

котка tom.txt | sed / ^ Вземете / d
СЕД-регулярен поемането

Sed е, разбира се, невероятно полезен. Но е още по-мощен в комбинация с Awk.

Какво е Awk?

Awkподобно на Sed, е език за програмиране, предназначен за работа с големи текстови части. Но докато Sed се използва за обработка и промяна на текст, Awk се използва най-вече като инструмент за анализ и докладване.

Подобно на Sed, Awk е разработен за първи път в Bell Labs през 70-те години. Името му не идва от това, което програмата прави, а по-скоро фамилиите на всеки един от авторите - Алфред Ахо, Питър Вайнбергер и Брайън Кернаган.

Awk работи, като чете текстов файл или входен поток един ред по един. Всеки ред се сканира, за да се види дали съвпада с предварително определен модел. Ако се намери съвпадение, се извършва действие.

Но макар Sed и Awk да споделят подобни цели, те са два напълно различни езика, с две напълно различни философии на дизайна. Awk по-скоро прилича на някои езици с общо предназначение Как да изберете език за програмиране, за да научите днес и да получите страхотна работа за 2 годиниМоже да отнеме години всеотдайна работа, за да станете наистина добър програмист; така че има ли начин да изберете правилния език, който да започнете от днес, за да се наемете утре? Прочетете още като C, Python и Bash. Той има неща като функции и по-подобен на С подход към неща като итерация и променливи (Джеймс Брус обясни как работи итерацията Абсолютните основи на програмирането за начинаещи (част 2)В част 2 от нашите абсолютни начинаещи ръководства за програмиране ще разгледам основите на функциите, връщащите стойности, контурите и условностите. Уверете се, че сте прочели част 1, преди да се заемете с това, където обясних ... Прочетете още ). Казано по-просто, тя се чувства повече като език за програмиране.

Така че, нека опитаме Използвайки текста на Take On Me, ще отпечатаме всички редове, които са по-дълги от 20 знака.

awk 'дължина ($ 0)> 80' tom.txt AWK дължина

Следващият пример безсрамно ясла от официалната документация на Awk. Но това е чудесен пример за потенциала на този мощен, но мъничък език. Освен това е чудесна демонстрация за това как работят като итерация и променливи в нея. Първо, създайте файл, наречен „WordCount.awk“, и добавете следните редове.

{за (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-Брой на думите
Готино, нали? Вероятно ще забележите, че те не са в никакъв ред. Вие мога сортирайте резултатите с помощта на помощната програма Unix за сортиране. Но ще оставим това за още един ден. Ще го опростим.

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

И Awk и Sed са невероятно мощни, когато са комбинирани. Можете да направите това с помощта на тръби Unix. Това са „|“ битове между команди.

Нека да опитаме това: Ще изброяваме всички редове в Take On Me, които имат повече от 20 знака, използвайки Awk. След това ще премахнем всички линии, които започват с "Предприеме". Заедно всичко изглежда така:

awk 'дължина ($ 0)> 20' tom.txt | sed / ^ Вземете / d

И произвежда това:

AWK дължина-СЕД

А сега да го обръщаме. Ще започнем с премахването на всички редове, които започват с Take, и след това ги изпращаме до Awk, където ще преброим колко пъти се появява всяка дума. Изглежда малко така:

котка tom.txt | sed / ^ Вземете / d | awk -f WordCount.awk
AWK-Брой на думите-СЕД

Силата на Sed и Awk

Има само толкова много неща, които можете да обясните в една статия Но се надявам да съм илюстрирал колко неизмеримо мощни са Sed и Awk. Най-просто казано, те са електроцентрала за обработка на текст.

И така, защо трябва да се грижиш? Е, освен факта, че никога не знаете кога трябва да направите предсказуеми, повтарящи се промени в текстов документ, Sed и Awk са чудесни за разбор на лог файлове. Това е особено удобно, когато се опитвате да отстраните грешката в проблема във вашия LAMP сървър Регистрация за уеб хостинг само за SSH? Не се притеснявайте - лесно инсталирайте всеки уеб софтуерНе знаете първото нещо за работа с Linux чрез мощния му команден ред? Не се притеснявайте повече. Прочетете още или разглеждате вашите регистрационни файлове за достъп, за да видите дали вашият сървър е хакнат.

Намерили ли сте интересна употреба за Sed and Awk? Има ли други помощни програми за Linux, които смятате, че са недооценени? Уведомете ме в коментарите по-долу и ще си поговорим.

Матю Хюз е разработчик на софтуер и писател от Ливърпул, Англия. Рядко се среща без чаша силно черно кафе в ръка и абсолютно обожава своя Macbook Pro и камерата си. Можете да прочетете неговия блог на http://www.matthewhughes.co.uk и го последвайте в Туитър в @matthewhughes.