Возникли некоторые вопросы, один из них:
Вот более сложный пример со спец-символом:
echo "ABCDEEEEDG" | sed -r 's/DE*/z/'
ABCzDG
Регулярные выражения следует читать слева-направо, потому как именно так они и просматриваются командой sed. Это выражение означает: Найти букву D, за которой идёт буква E, которая повторяется любое число раз. Тут видно что во-первых, спец-символ `*' действует только на один обычный символ(на букву E в данном случае), и во-вторых, видна жадность звёздочки, она захватила не "любоё" количество E, а всё что смогла. В sed все модификаторы ведут себя точно так-же, и нет никакой возможности изменить это поведение, это очень полезно для ускорения работы наших скриптов. На самом деле наша строка делится на четыре части:
"ABC"
которая не подходит под шаблон /DE*/
"DEEEE"
которая подходит под шаблон, причём подходит пятью способами: "D", "DE", "DEE", "DEEE", и "DEEEE".
"D"
, эта часть подходит одним способом.
"G"
это не подходит.
Почему "DEEEE" подходит 5тью, а в "D" одним способом? Ведь шаблон DE* означает, что как минимум должно существовать как D, так и E! Ну, и максимум DE с любым колличеством последующих E. То есть я понимаю так, что "DEEEE" подходит 4мя способами (DE, DEE, DEEE, DEEEE), а "D" не подходит так же, как "ABC" и "G"...
Уже несколько раз возвращался к этому моменту, но никак не могу въехать.