Не экранируется точка в условии ИЛИ

Подскажите, пожалуйста. Не работает установка разделителя в awk. Выражение

echo один,два.три | awk -F"(\.)" '{print "1="$1, "2="$2}'

работает корректно, но если добавить в разделитель, например, запятую, то работать перестаёт...

echo один,два.три | awk -F"(\.|,)" '{print "1="$1, "2="$2}'

В чём причина? Само регулярное выражение (.|,) ведь корректно.


Ответы (1 шт):

Автор решения: Ainar-G

Для начала, то, что вы хотите, в данном случае пишется проще:

$ echo один,два.три | awk -F '[,.]' '{print "1="$1, "2="$2}'
1=один 2=два
$

В вашем же коде вы используете двойные кавычки, которые могут проглатывать экранирование. Помимо этого надо помнить, что Awk; принимает вашу строку и скармливает её своему парсеру регекспов, а значит надо экранировать дважды:

$ echo один,два.три | awk -F '(\\.|,)' '{print "1="$1, "2="$2}'
1=один 2=два
$

См. также:

→ Ссылка