Что случилось с моим lookahead regex в GNU sed?
это то, что я делаю (упрощенный пример):
gsed -i -E 's/^(?!foo)(.*)$/bar/' file.txt
Я пытаюсь поставить bar
перед каждой строкой, которая не начинается с foo
. Это ошибка:
gsed: -e expression #1, char 22: Invalid preceding regular expression
что случилось?
3 ответов
насколько я знаю sed
не имеет ни взгляда вперед, ни взгляда назад. Переключитесь на более мощный язык с похожим синтаксисом, например perl
.
sed -i '/^foo/! s/^/bar/' file.txt
-
-i
изменить файл на месте -
/^foo/!
только выполните следующее действие на строках не!
начиная с фу^foo
-
s/^/bar/
измените начало строки на bar
вы используете синтаксис Perl-совместимого регулярного выражения (PCRE), который не поддерживается GNU sed. Вы должны переписать регулярное выражение в соответствии с SED Регулярные Выражения или вместо этого используйте perl.