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