2016-03-01 4 views
0

Учитывая входной файл text.txtСЕПГ порядок дизъюнкции соответствует

First token second pattern, second pattern. 

И работает:

sed -r -i "s/pattern|second pattern/REPLACE/g" input.txt 

Я получаю новый input.txt:

First token REPLACE, REPLACE. 

Это выглядит second pattern применяется сначала здесь, чтобы соответствовать содержимому input.txt.

Каков порядок, в котором отклонения в sed соответствуют исходному тексту в sed?

Можно ли указать порядок, в котором должны применяться дизъюнкции матчей, которые работают вместе с командой -i inline?

+2

Правило большого пальца - это «самое длинное самое длинное совпадение» - совпадение, которое начинается первым, и нескольких вариантов, наиболее длинных. Поскольку перед «шаблоном» появляется «второй образец», два слова всегда будут заменены в первую очередь. –

ответ

2

Не уверен, что именно то, что СЭД движок регулярных выражений делает с чередованием (|) оператора, но так, чтобы получить желаемый результат может быть разделить на два регулярных выражений заявления в СЭД:

sed -r -i "s/pattern/REPLACE/g;s/second pattern/REPLACE/g" 

Это должно дают вам полный однозначный контроль над порядком, в котором применяются замены, в то время как все еще происходит в одном вызове sed, который хорошо работает с редактированием inplace (-i).

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