これは私がやっていることです(簡単な例):
gsed -i -E 's/^(?!foo)(.*)$/bar\1/' file.txt
bar
で始まらないすべての行の前にfoo
を配置しようとしています。これはエラーです:
gsed: -e expression #1, char 22: Invalid preceding regular expression
どうしましたか?
私が知る限り、sed
は先読みも後読みもしていません。 Perl
のような同様の構文で、より強力な言語に切り替えます。
sed -i '/^foo/! s/^/bar/' file.txt
-i
所定の場所でファイルを変更/^foo/!
は、foo!
で始まる^foo
ではなく、行でのみ次のアクションを実行しますs/^/bar/
行の開始をbarに変更しますGNU sedでサポートされていないPerl互換正規表現(PCRE)構文を使用します。SED Regular-Expressions に従って正規表現を書き換えるか、代わりにPerlを使用してください。