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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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





Руководство пользователя для 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