webdevqa.jp.net

GNU sedの先読み正規表現の何が問題になっていますか?

これは私がやっていることです(簡単な例):

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

barで始まらないすべての行の前にfooを配置しようとしています。これはエラーです:

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

どうしましたか?

44
yegor256

私が知る限り、sedは先読みも後読みもしていません。 Perlのような同様の構文で、より強力な言語に切り替えます。

54
Birei
sed -i '/^foo/! s/^/bar/' file.txt
  • -i所定の場所でファイルを変更
  • /^foo/!は、foo!で始まる^fooではなく、行でのみ次のアクションを実行します
  • s/^/bar/行の開始をbarに変更します
116
kkeller

GNU sedでサポートされていないPerl互換正規表現(PCRE)構文を使用します。SED Regular-Expressions に従って正規表現を書き換えるか、代わりにPerlを使用してください。

7
hostmaster