LINUX.ORG.RU

Не работают регулярные вырожения в AWK и GREP

 , , ,


0

2

Здравствуйте. Составил регулярное выражение https://regex101.com/r/1HyvMd/1/

^41:01:00\d{5}:\d{1,4}$

Но не могу добиться чтобы оно работало в AWK и GREP

less base1c.csv | awk -F";" '/^41:01:00\d{5}:\d{1,4}$/ {print $10}'
# или 
less base1c.csv | awk -F";" '{print $10}' | grep -e '^41:01:00\d{5}:\d{1,4}$'

Команды запускаю в консоли Kubuntu 20.04 и Lubuntu 18.04. Если я правильно понимаю, то AWK не понимает символы: {,}, ^, $, \d. А GREP не понимает символы: {,}, \d.

Есть ли возможность включить какую нибудь настройку чтобы вышеперечисленные символы начали работать? Понимаю, что можно поступить более прямолинейно и написать что-то вроде: less base1c.csv | awk -F";" '/41:01:00[0-9][0-9][0-9][0-9][0-9]:[0-9]+/ {print $10}'

Но хочется добиться большей гибкости.

P.S. это клон моей темы на cuberforum. Решил задать вопрос здесь т.к. там долго жду ответа, а этот форум мне часто помогал через поисковые системы.

P.S.S. Приятно удивлен удобством этого форума т.к. сижу с старого нетбука на Lubuntu.


 > echo '41:01:0011126:2614' | grep -E '^41:01:00[0-9]{5}:[0-9]{1,4}$'
41:01:0011126:2614

Или egrep

anonymous ()
egrep '^41:01:00[[:digit:]]{5}:[[:digit:]]{1,4}$'
awk '/^41:01:00[[:digit:]]{5}:[[:digit:]]{1,4}$/ { print }'

\d – это Perl’овое расширение. Класс чисел – это [[:digit:]] или [0-9].

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от Gnom7

У grep есть ключик -P, а awk — целый язык, там такие вещи, как проверить, есть ли что-то там вначале — и нагляднее и удобнее делается.

vodz ★★★★★ ()

А GREP не понимает символы: {,}, \d.

понимает, если укажешь ему интерпретировать регексы как PCRE.

Другое дело, если тебе нужны сложные регулярки с (P|N)L(A|B). Тогда лучше сразу perl. Он довольно нетребовательный к ресурсам.

anonymous ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.