У меня есть следующая строка:
abababtestab
Я пытаюсь выяснить sed
выражение, чтобы удалить все вхождения ab
из начала строки, поэтому преобразованная строка должна быть:
testab
Я чувствую, что это должно быть просто, но я действительно ничего не знаю об этом sed
.
То, что я до сих пор это:
sed 's/^ab//'
Но это только удаляет первое вхождение ab.
sed
с 1979 года поддержало его. Это было бы плохой имитацией, чтобы не справиться с группировкой.\n*
, но нет\n\{min,max\}
.\(...\)*
или\(...\)\{min,max\}
, как неумышленный результат конкретной реализации, и они поддерживали как дублирование, так и интервальные выражения после подвыражений и обратных ссылок.\(ab\)\1*
версия работает с семейной реликвией по умолчаниюsed
, а\(ab\)*
версия работает с семейной реликвией SuSv4sed
. По крайней мере, для моей сборки. По общему признанию, я построил свой семейный набор против musl lib C, и поэтому я могу предположить, что это могло заставить его вести себя по-другому. Но обычно, когда указанная функция работает в инструменте семейной реликвии SuSv4, а не в инструменте по умолчанию, это происходит потому, что разработчик сделал это.Другое
sed
:Для каждой строки ввода мы устанавливаем метку
:1
, а затем выполняемs
заменуab
в начале строки. Еслиs
ubstitution успешно,t
est команда ветвится к метке1
, повторяйте работу до тех пор, покаab
в начале строки не появится шаблон, мы закончили.источник
s/^ab//; t1
достаточно