Это регулярное выражение жадный , поскольку .*
будет соответствовать максимальному количеству символов.
Это означает, что оно будет пытаться вытянуть совпадение из того, что вы думаю, - это первый шаблон на всем пути к тому, что вы считаете вторым.
Хотя вы можете думать, что есть два сопоставленных шаблона, факт, что это растяжение происходит, означает, что есть только одини это длиннее, чем вы думаете.
Быстрое исправление состоит в том, чтобы убедиться, что он не соответствует следующему -
символу с чем-то вроде:
sed 's/l2-[^-]*-[^-]*-[^-]*-/l2-2-ghb-8-m-/g'
согласно следующемурасшифровка:
pax> echo '--dump-config=h264_sss-l2-2-ghb-16-500.ini --stats-file=h264_sss-l2-2-ghb-16-500.stat configs/example/cmp.py --l2cache -b h264_sss' | sed 's/l2-[^-]*-[^-]*-[^-]*-/l2-2-ghb-8-m-/g'
--dump-config=h264_sss-l2-2-ghb-8-m-500.ini --stats-file=h264_sss-l2-2-ghb-8-m-500.stat configs/example/cmp.py --l2cache -b h264_sss
(команда и вывод немного изменены, выстроены в ряд, чтобы вы могли легко видеть преобразования).
Это работает, потому что, хотя .*
говорит самое большое поле любогосимволов, [^-]*
говорит о наибольшем поле из любых символов , за исключением -
.