awk регулярные выражения примеры

Awk регулярные выражения примеры

AWK сканирует input (стандартный или указываемый набор файлов), и над строками, удовлетворяющими заданному образцу, выполняет указываемые действия. Строка может содержать максимально до 256 символов.

awk [-Fc] [-f file] [files]

Строка может содержать максимально до 100 полей.

&lt Drawing or tabular insertion skipped. &gt

Строка может содержать максимально до 256 символов.

Последовательности образцов, соединенных одним из знаков читаются слева направо.

Комбинация: «образец1, образец2» указывает, что действие выполняется над строками, попадающими в указанный ранг: то есть, начиная от строки, удовлетворяющей «образец1″ и вплоть до строки, удовлетворяющей «образец2″, включая ее саму.

Образец BEGIN указывает на начало input или на те действия, которые должны быть выполнены до какого бы то ни было анализа строк. Образец END указывает на конец input или на те действия, которые должны быть выполнены после обработки всех строк.

BEGIN — Устанавливает разделитель полей в «:» до начала обработки строк. Эквивалентно опции «-F:» при AWK вызове.

PRINT [&lt список выражений &gt ] [ &gt &lt выражение1 &gt ]

Если в списке выражения находятся через запятую, то значения этих выражений выводятся на output (печатаются) через символ-разделитель OFS (по умолчанию пробел). Если же выражения стоят через пробел, то на печати происходит их конкатенация.

Значение &lt выражения1 &gt рассматривается как имя файла. Само его присутствие означает печать в файл. Если вместо « &gt » стоит « &gt &gt », то это означает добавление к уже существующему файлу. Можно использовать в одной программе максимально до 10 output файлов.

Оператор форматированной печати:

&lt переменная &gt = &lt выражение &gt

if ( &lt условие &gt ) &lt предложение &gt

\hskip 1cm [else &lt предложение &gt ]

while ( &lt условие &gt ) &lt предложение &gt

\hskip 1cm &lt предложение &gt

Источник

Регулярные выражения интерпретатора awk

dark fb.4725bc4eebdb65ca23e89e212ea8a0ea dark vk.71a586ff1b2903f7f61b0a284beb079f dark twitter.51e15b08a51bdf794f88684782916cc0 dark odnoklas.810a90026299a2be30475bf15c20af5b

caret left.c509a6ae019403bf80f96bff00cd87cd

caret right.6696d877b5de329b9afe170140b9f935

Простейшим регулярным выражением является строка символов, обрамленная знаками «/». Например:

Эта означает все записи, которые содержат подстроку Asia (например, запись, содержащая Asia как часть длинной строки, подобной Asian или Pan-Asiatic).

Чтобы ограничить поиск следует использовать операторы

ищет подстроку Asia, в то время как программа:

ищет подстроку в которой не содержится Asia.

В регулярном выражении могут использоваться метасимволы:

Символ Описание
^ указывает на начало строки (

/^awk/ означает «начинается на awk»)

$ указывает на конец строки (

/awk$/ означает «заканчивается на awk»)

. указывает на любой символ, кроме начала новой строки (

/.wk/ может соответствовать «awk» но не «wk»)

[] соответствует любому из указаных в квадратных скобках символу. Если первый символ внутри скобок ^ то берутся символы НЕ указанные в квадратных скобках. Вместо перечисления символов может быть указан диапазон (например «a-c»).
* Любая подстрока или её отсутствие
? Любой символ или его отсутствие
| разделяет альтернативы
() групирует символы (

/(awk|Shell)/ означает либо «awk», либо «Shell»)

+ означает что предыдущий символ или группа может повториться несколько раз (

/(awk)+/ означает либо «awk», либо «awkawk», либо «awkawkawk» и т. д.)

\ отменяет специальное значение символа, превращая его из метасимвола в обычный (

/\^awk/ означает именно подстроку «^awk»)

просматривает записи для поиска записи, состоящей из одного символа.

поиск любой английской буквы

Состоит только из цифр

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

\f – перевод формата

\r – возврат каретки

\ddd – восьмиричное значение

c – любой метасимвол

Означает поиск табуляции

Предположим, что нужно найти строку символов, подобную ^2+$. Если строка «^7+$» используется как регулярное выражение, появляются дополнительные знаки «\», которые защищают регулярное выражение. Это связано с тем, что первый уровень знаков «\» удаляется при синтаксическом анализе строки. Первый уровень «\» перед символом возвращает его специальное значение в регулярном выражении, второй нужен, чтобы защитить его в строке.

Например, нужно найти строки, содержащие «b» и следующий за ним знак «$». Регулярное выражение для этого шаблона:

Чтобы создать строку для представления этого регулярного выражения, необходимо добавить еще один символ «\»:

Следующие регулярные выражения попарно эквивалентны:

Регулярные выражения Perl (целиком совместимы с выражениями в image001.htaccess)

Символ Описание
. Соответствует любому символу (за исключением символа новой строки)
(. ) Группирует последовательность элементов
+ Удовлетворяет предыдущему образцу один или большее количество раз
? Удовлетворяет образцу нуль или один раз
* Соответствует образцу один или нуль раз
[. ] Соответствует символу из заданного множества
[^. ] Соответствует символу из множества, полученного отрицанием
(. |. |. ) Соответствует одной из альтернатив
^ Соответствует началу строки
$ Соответствует образцу в конце строки
Соответствует образцу от n до m раз
Соответствует образцу точно n раз
Соответствует образцу минимум n раз
\n\t etc. Соответствует знаку новой линии, символу табуляции и т. д.
\b Соответствует на границе слова
Соответствует НЕ границе слова
\d Соответствует цифре
\D Соответствует не цифре
\s Соответствует пробелу
\S Соответствует не пробелу
\w Соответствует букве или цифре
\W Соответствует символу, не являющемуся ни буквой, ни цифрой

Perl помещает регулярные выражения (образцы, шаблоны) в слэши, т. е. в наклонные черточки, например, в виде /pattern/. Следующие регулярные выражения истинны если:

/ig/ Строка содержит ‘ig’
/(b|d|f)ig/ Строка содержит ‘big’, ‘dig’ or ‘fig’
/4+/ Строка содержит номер

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

В данном случае регулярные выражения принимают значение «истинно», если образец найден в строке ($str). Если строка по содержит образца, то выражение возвращает значение «ложно». Например, следующее выражение проверяет, содержит ли строка текст Web Programming:

Источник

How to use regular expressions in awk | Opensource.com

Use regex to search code using dynamic and complex pattern definitions.

code computer laptop hack work

Subscribe now

Get the highlights in your inbox every week.

In awk, regular expressions (regex) allow for dynamic and complex pattern definitions. You’re not limited to searching for simple strings but also patterns within patterns.

The syntax for using regular expressions to match lines in awk is:

The inverse of that is not matching a pattern:

If you haven’t already, create the sample file from our previous article:

Save the file as colours.txt and run:

You have selected all records containing the letter p followed by either an e or an l.

Adding an o inside the square brackets creates a new pattern to match:

Regular expression basics

Certain characters have special meanings when they’re used in regular expressions.

Anchors

Anchor Function
^ Indicates the beginning of the line
$ Indicates the end of a line
\A Denotes the beginning of a string
\z Denotes the end of a string
\b Marks a word boundary

For example, this awk command prints any record containing an r character:

Add a ^ symbol to select only records where r occurs at the beginning of the line:

Characters

Character Function
[ad] Selects a or d
[a-d] Selects any character a through d (a, b, c, or d)
[^a-d] Selects any character except a through d (e, f, g, h…)
\w Selects any word
\s Selects any whitespace character
\d Selects any digit

The capital versions of w, s, and d are negations; for example, \D does not select any digit.

POSIX regex offers easy mnemonics for character classes:

POSIX mnemonic Function
[:alnum:] Alphanumeric characters
[:alpha:] Alphabetic characters
[:space:] Space characters (such as space, tab, and formfeed)
[:blank:] Space and tab characters
[:upper:] Uppercase alphabetic characters
[:lower:] Lowercase alphabetic characters
[:digit:] Numeric characters
[:xdigit:] Characters that are hexadecimal digits
[:punct:] Punctuation characters (i.e., characters that are not letters, digits, control characters, or space characters)
[:cntrl:] Control characters
[:graph:] Characters that are both printable and visible (e.g., a space is printable but not visible, whereas an a is both)
[:print:] Printable characters (i.e., characters that are not control characters)

Quantifiers

Quantifier Function
. Matches any character
+ Modifies the preceding set to mean one or more times
* Modifies the preceding set to mean zero or more times
? Modifies the preceding set to mean zero or one time
Modifies the preceding set to mean exactly n times
Modifies the preceding set to mean n or more times
Modifies the preceding set to mean between n and m times

Many quantifiers modify the character sets that precede them. For example, . means any character that appears exactly once, but .* means any or no character. Here’s an example; look at the regex pattern carefully:

Similarly, numbers in braces specify the number of times something occurs. To find records in which an e character occurs exactly twice:

Grouped matches

Quantifier Function
(red) Parentheses indicate that the enclosed letters must appear contiguously
| Means or in the context of a grouped match

For instance, the pattern (red) matches the word red and ordered but not any word that contains all three of those letters in another order (such as the word order).

Awk like sed with sub() and gsub()

Awk features several functions that perform find-and-replace actions, much like the Unix command sed. These are functions, just like print and printf, and can be used in awk rules to replace strings with a new string, whether the new string is a string or a variable.

The sub function substitutes the first matched entity (in a record) with a replacement string. For example, if you have this rule in an awk script:

running it on the example file colours.txt produces this output:

The reason both apple and pineapple were replaced with nut is that both are the first match of their records. If the records were different, then the results could differ:

The gsub command substitutes all matching items:

Gensub

An even more complex version of these functions, called gensub(), is also available.

The gensub function allows you to use the & character to recall the matched text. For example, if you have a file with the word Awk and you want to change it to GNU Awk, you could use this rule:

This searches for the group of characters Awk and stores it in memory, represented by the special character &. Then it substitutes the string for GNU &, meaning GNU Awk. The 1 character at the end tells gensub() to replace the first occurrence.

There’s a time and a place

Awk is a powerful tool, and regex are complex. You might think awk is so very powerful that it could easily replace grep and sed and tr and sort and many more, and in a sense, you’d be right. However, awk is just one tool in a toolbox that’s overflowing with great options. You have a choice about what you use and when you use it, so don’t feel that you have to use one tool for every job great and small.

With that said, awk really is a powerful tool with lots of great functions. The more you use it, the better you get to know it. Remember its capabilities, and fall back on it occasionally so can you get comfortable with it.

Our next article will cover looping in Awk, so come back soon!

This article is adapted from an episode of Hacker Public Radio, a community technology podcast.

Источник

Понравилась статья? Поделить с друзьями: