2016-09-21 4 views
0

Что не так с нижним регулярным выражением в unix?Что не так с нижним регулярным выражением

echo AB345678 | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}|[0-9]\{8\}\)$/p' 
echo 12345678 | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}|[0-9]\{8\}\)$/p' 

я не получаю выход :(

Я имею в виду строка повторила я почему это не соответствует с моим регулярным выражением? Что случилось с моим регулярным выражением?

+0

Какой выход вы хотите? – Thomas

+2

В этом нет ничего плохого. Это именно тот, который вы написали. Наверное, он вполне доволен. – arkascha

ответ

2

Оператор Чередование в синтаксис регулярных выражений BRE должен быть определен как беглые трубы \| (аналогичны ( и )):

echo "AB345678" | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}\|[0-9]\{8\}\)$/p' 
                 ^^ 

См. online demo.

+0

Я пробовал оба из ниже, но все равно никакого вывода. echo AB345678 | sed -n '/^\ ([a-zA-Z] \ {2 \} [0-9] \ {6 \} \ | [0-9] \ {8 \} \) $/p' эхо "AB345678" | sed -n '/^\ ([a-zA-Z] \ {2 \} [0-9] \ {6 \} \ | [0-9] \ {8 \} \) $/p' –

+0

I см. «/ usr/xpg4/bin/sed», когда я делаю «какое sed». –

+0

Означает ли это, что вы находитесь на Sun OS? См. [Эту тему] (http://unix.stackexchange.com/a/151020). –

0

В более сложном выражении вы можете добавить '-r' в опции sed вместо экранирования чувствительных символов.

Из SED инструкции:

-r, --regexp-расширенный
использование расширенных регулярных выражений в сценарии.

Ответ:

echo AB345678 | sed -nr '/^([a-zA-Z]{2}[0-9]{6}|[0-9]{8})$/p' 
        ^
echo 12345678 | sed -nr '/^([a-zA-Z]{2}[0-9]{6}|[0-9]{8})$/p' 
        ^
+0

@LalitSomnathe Почему бы вам не взглянуть на мой ответ. Я думаю, что это более элегантно. Этот вопрос также должен быть помечен #sed, так что эта проблема не применима к системам regex или unix, а синтаксис sed. – hbadger

Смежные вопросы