sed & awk / sed & awk: 3.1 Выражение
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Вы возможно знакомы с некоторыми выражениями, которые интерпретирует калькулятор. Посмотрим на следующее арифметическое выражение: r0mk 12.10.12 в 10:49 |
|
|
2 + 4 r0mk 12.10.12 в 10:49 |
||
|
"Два плюс четыре" содержит несколько констант или буквенных значений и оператор. Программа калькулятор должна распознать, для примера, что "2" это числовая константа и знак плюс является оператором, и не будет обработа как символ "+". r0mk 15.10.12 в 07:24 |
||
|
Выражение говорит компьютеру, как вывести результат. Хотя результат "два плюс четыре" который мы хотим получить, мы не просто говорим компьютеру вывести шесть. Мы даем компьютеру инструкции для обработки выражения в возврата значения. r0mk 15.10.12 в 07:28 |
||
|
Выражение может быть сложнее, чем "2 + 4"; фактически, оно может состоять из множества простых выражений, как следующее: r0mk 15.10.12 в 07:29 |
||
|
2 + 3 * 4 r0mk 12.10.12 в 10:49 |
||
|
Кальлутор, обычно, обрабатывает выражение с лева на право. Однако, конткретные операторы имеют приоритет перед другими: и обрабатываются первыми. Таким образом, показанное выше выражение вернет 14, а не 20, помтому, что умножение имеет приоритет. Приоритет может быть перезаписан, помещением простого выражения в скобки. Таким образом "(2 + 3) * 4" или "сумма вдух и трех, умноженная на четыре" вернет 20. Скобки, это символы, которые объясняют калькулятору изменить порядок в котором значения поступают. r0mk 15.10.12 в 09:53 |
||
|
Регулярное выражение описывает шаблон или последовательность символом. Объединение является базовой операцией, подразумеваемой в каждом выражениее. Тоесть шаблон соответствует соседним символам. Рассмотрим следующее регулярное выражение: r0mk 15.10.12 в 13:04 |
||
|
ABE r0mk 15.10.12 в 13:05 |
||
|
Каждая буква является регуляным выражением, которое удовлетворяет только одному символу. Это выражение читается "После А следует В, затем следует Е" или просто "строка АВЕ". Термин "строка" означает каждый символ объединенный с предшествующим. Это регулярное выражение описывает последовательсть не может быть подчеркнута. ( Новички склонны думать о высокоуровневых единицах, а не в отдельных символах.) Регулярное выражение чувствительно к регистру; "А" не значие "а". r0mk 15.10.12 в 13:10 |
||
|
[1] Некоторые другие программы, которые используют регулярные выражения, предлагают опции чувствительные к регистру, в отличии от sed и awk r0mk 18.10.12 в 07:48 |
||
|
Программы, такие как grep, понимают регулярные выжадения и проверяют синтаксис регулярных выражений для обработки шаблон. Они читают вход построчно в поисках шаблона. Входные строки символьные и для проверки соответствию шаблону, программа сравнивает первый символ в строке с первыми символом в шаблоне. Если он совпадает, она сравнивает второй символ в строке со вторым символом из шаблона. Когда проверка проваливается, она возвращается и пробует снова, начиная со следующего символа в строку. Рисунок 3.1 показывает этот процесс, пробуя найти шаблон "abe" в входной строке. r0mk 18.10.12 в 07:54 |
||
|
Регулярное выражение не ограничивается буквенными символами. Вот, например, спецсимвол точка (.) - который может быть использован в качестве подстановочного для совпадения любому одиночному символу. Таким обрзаом, мы можем указать регулярное выражение "А.Е" и оно будет удовлетворять "ACE," "ABE", и "ALE". Он будет удовлетворять любому символу идущему после "А". r0mk 18.10.12 в 09:44 |
||
|
Спецсимвол *, звездочка, используется для подставновки нуля или более вхождений предыдущего символа регулярного выражения, который обычно одиночный символ. Вы можете быть с знакомы с *, как спецсимволом шелл, где он означает "ноль или более символов". Но это значение очень отличается от * в регулярном выражении. Сам по себе спецсимвол звездочка незначит ничего; он изменяет то, что было перд ним. регулярное выражение .* удовлетворяет любому числу или символу, в то время как в шелле, * означает этоже. (Для примера, в шелле ls * покажает список всех файлов в текущей директории.) Регулярное выражение "А.*Е" удовлетворяет любой строке, которая удовлетворяет "А.Е", но также любом удовлетворяет любому символу или числу между "А" и "Е": "AIRPLANE," "A FINE," "AFFABLE," или "A LONG WAY HOME,", для примера. Запомните, что "любой символ или число" может быть нулевым! r0mk 18.10.12 в 10:10 |
||
|
Если Вы понимаете разницу между "." и "*" в регулярных выражения, Вы уже знаете о двух основных типах спецсимволом: те, которые могут быть распознаны как отдельный символ и те. которые изменяют обработку символов уже распознанных. r0mk 18.10.12 в 10:12 |
||
|
Это также должно быть очевидно, что с помощью спецсимволов Вы можете расширить или сократить возможные совпадения. Вы имеетен больший контроль над тем что совпадает, а что нет. r0mk 18.10.12 в 10:14 |
||
|
Figure 3.1: Понимание регулряных выражений r0mk 18.10.12 в 10:14 |
