П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 3520 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6121 раз(а).

Учебник HTML.
Просмотров 3276 раз(а).

Руководство по PHP5.
Просмотров 5497 раз(а).

Хостинг через призму DNS.
Просмотров 4145 раз(а).

Подборка текстов стандартных документов.
Просмотров 55773 раз(а).

Учебник PHP - Самоучитель
Просмотров 3091 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 5723 раз(а).

Внешние атаки...
Просмотров 3841 раз(а).

Учебник PHP.
Просмотров 2825 раз(а).

SSI в примерах.
Просмотров 37463 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Руководство пользователя для GNU Awk

5. Чтение входных файлов

5.5.2 Использование регулярных выражений для разделения полей

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

Например, присваивание:

FS = ", "t"

делает каждую часть входной строки, состоящую из запятой с последующим пробелом и tab, разделителем полей. (`"t' есть управляющая последовательность, которая обозначает знак tab, см. раздел 4.2 [Управляющие последовательности], стр. 24, содержащий полный список управляющих последовательностей.)

А вот менее тривиальный пример регулярного выражения. Предположим, вам нужно иметь разделителями отдельные пробелы, как выше для этого использовались отдельные запятые. Вы можете присвоить FS "[ ]" (левая квадратная скобка, пробел, правая квадратная скобка). Это регулярное выражение соответствует единственному пробелу и ничему другому (см. Главу 4 [Регулярные выражения], стр. 23).

Имеется важная разница между двумя случаями: `FS = " "' (одиночный пробел) и `FS = "[ "t"n]+"' (левая квадратная скобка, пробел, обратный слеш, "t", обратный слеш, "n", правая квадратная скобка, составляющие регулярное, выражение, соответствующее одному или более пробелам, tab или newline). Для обоих FS поля разделяются группами пробелов, tab и/или newline. Однако, если значение FS есть " ", awk сначала убирает из записи ведущие и завершающие белые пробелы, а затем решает, как расположены записи.

Например, такой конвейер напечатает `b':

$ echo ' a b c d ' -- awk '- print $2 ""'
a b

Однако, следующий конвейер напечатает `a' (заметьте дополнительные пробелы вокруг каждой буквы):

$ echo ' a b c d ' -- awk 
	'BEGIN - FS = "[ "t]+" "" ? - print $2 ""'
a a

В этом случае первое поле пусто. Удаление ведущих или завершающих белых пробелов происходит каждый раз, когда пере вычисляется $0.

Например, рассмотрите такой конвейер:

$ echo ' a b c d' -- awk '- print; 
$2 = $2; 
print ""'
a a b c d
a a b c d

Первый оператор печати печатает запись как она прочиталась, с нетронутым ведущим белым пробелом. Присваивание $2 перестраивает $0 посредством конкатенации вместе от $1 до $NF, разделенных посредством значения OFS. Поскольку ведущие белые пробелы игнорируются при нахождении $1, они не служат частью нового $0. Окончательно, последний оператор печати печатает новую $0.

Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru