Подтвердить что ты не робот

Что не так с моим регулярным выражением в GNU sed?

Это то, что я делаю (упрощенный пример):

gsed -i -E 's/^(?!foo)(.*)$/bar\1/' file.txt

Я пытаюсь поставить bar перед каждой строкой, которая не начинается с foo. Это ошибка:

gsed: -e expression #1, char 22: Invalid preceding regular expression

Что не так?

4b9b3361

Ответ 1

Насколько я знаю, sed не имеет ни взгляда, ни взгляда. Перейдите на более мощный язык с похожим синтаксисом, например perl.

Ответ 2

sed -i '/^foo/! s/^/bar/' file.txt
  • -i = > изменить файл на месте
  • /^foo/! = > выполнять следующее действие только в строках (!), начиная с foo (^foo)
  • s/^/bar/ = > изменить начало строки на бар  

Ответ 3

Вы используете синтаксис регулярного выражения, совместимого с perl, который не поддерживается GNU sed. Вы должны переписать свое регулярное выражение в соответствии с SED Regular-Expressions или использовать perl вместо этого.