Awk сопоставление всей записи с использованием регулярного выражения - PullRequest
1 голос
/ 06 декабря 2008

Используя Awk, я хочу сопоставить всю запись с помощью регулярного выражения. По умолчанию сопоставление регулярного выражения выполняется для частей записи.

Идеальное решение будет:

  • Общее для всех полей, независимо от используемого разделителя полей.
  • Не обрабатывать весь ввод как одно поле и анализировать его вручную, используя строковые функции.
  • Работайте в общем и не относитесь, например, к gawk.

Однако любые и все решения представляют интерес, поскольку они используют Awk без вызовов внешних программ .

Например, у меня есть:

$ ls
indata.txt  t1.awk
$ cat indata.txt 
a1010_
1010_
1010_b
$ cat t1.awk 
/[01]*_[01]*/ { print $0 }

Я получаю:

$ awk -f t1.awk indata.txt
a1010_
1010_
1010_b

Вот результат, который я ищу:

$ awk -f t1.awk indata.txt
1010_

Ответы [ 2 ]

4 голосов
/ 06 декабря 2008

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

/^[01]*_[01]*$/ { print $0 }
2 голосов
/ 06 декабря 2008
$ gawk '/^[01]*_[01]*$/' indata.txt
1010_
...