2014-11-15 4 views
0

Я подкрадываюсь к своему регулярному выражению, видя, что могу сделать, а также сужу свой стандартный стиль кодирования. то я написал небольшой фрагмент, который должен был работать, но не будет. поэтому я продолжал сведя ее к самой основной форме, и до сих пор не делать я хочу, чтобы это сделать:Почему это простое регулярное выражение не работает

echo "a" | sed -e 's/a+/A/g' 

почему это не выход

A 

я просто сбит с толку, почему это не работы ...

+0

+ является расширенным регулярным выражением .using -r – Kalanidhi

+0

@KalanidhiM. Он также может использоваться в POSIX-регулярных выражениях, но вам нужно его избежать: '\ +'. Но '+' здесь просто не требуется – hek2mgl

+0

Альтернативой 'a +', который является метасимволом, представляющим один или несколько 'a', является' aa * ', который представляет' a', за которым следует ноль или более 'a' ' s. Нотабене '+' является расширением GNU и должен быть экранирован или включен ключ '-r', тогда как' aa * 'доступен во всех seds. – potong

ответ

1

Вам не нужен +. Если вы хотите заменить все строчный a путем A верхнего регистра вы можете использовать это:

echo "abcdabdbda" | sed 's/a/A/g' 

Выход:

AbcdAbdbdA 

+ специальный символ в регулярном выражении. Он соответствует предыдущему символу или группе как минимум один или несколько раз. Вам здесь не нужно.

Примечание: Если вы используете + в стандартном шаблоне регулярных выражений, вам нужно будет сбежать от него: \+, чтобы придать ему особый смысл. Без ускорения это будет угрожать как буквальный +.

+0

Может быть, он хочет объединить несколько 'aaa' в один' A'? – sln

+0

Вопрос слишком неясен, чтобы сказать это. Я предполагаю, что он знал о различии между '/ g' и' + '.. Но не уверен. – hek2mgl

1

Если вы хотите, чтобы он работал с этим синтаксисом, вам необходимо убедиться, что sed интерпретирует регулярное выражение как расширенное регулярное выражение.

Для этого вы можете использовать -E на Mac OSX:

echo "a" | sed -E -e 's/a+/A/g' 

или -r флаг на Linux:

echo "a" | sed -r -e 's/a+/A/g' 
+0

Почему' + 'требуется здесь вообще? Обратите внимание, что вы можете использовать '+' даже в простых регулярных выражениях, но вам нужно его избежать: '\ +' – hek2mgl

+0

В этом случае '+' не требуется, но поскольку OP писал, что это приведенный пример, я думаю, что оригинальный корпус действительно требуется. – ebo

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