perl で sed を使用して、いくつかのファイルで ^[(s3B を空の文字列に置き換えようとしています。
s/^[(s3B// がうまく動かないので、他に何を試してみようか考え中です。
特殊文字を引用する必要があります:
$ echo "^[(s3B AAA ^[(s3B"|sed 's/\^\[[(]s3B//g'
AAA
$ echo "^[(s3B AAA ^[(s3B" >file.txt
$ perl -p -i -e 's/\^\[[(]s3B//g' file.txt
$ cat file.txt
AAA
問題は、正規表現で特別な意味を持つ文字がいくつかあることです。^
は行頭アンカーであり[
、文字クラスを(
開き、キャプチャを開きます。
Perl 文字列の英数字以外は、前に を付けることですべてエスケープできるため、\Q
安全に使用できます。
s/\Q^[(s3B//
これは同等であり、より読みやすい
s/\^\[\(s3B//
ANSI シーケンス (xterm カラー シーケンス、エスケープ シーケンス) を扱っている場合、^[ は '^' の後に '[' が続くのではなく、印刷できない文字 ESC、ASCII コード 0x1B です。
その文字を sed 式に入れるには、GNU sed で \x1B を使用するか、http://www.cyberciti.biz/faq/unix-linux-sed-ascii-control-codes-nonprintable/を参照してください 。Bash の行編集で ctrl+v を使用して、特殊文字をコマンド ラインに直接挿入することもできます。
正規表現では、「^」、「[」、「(」(およびその他の多く) は特別な正規表現機能に使用される特殊文字です。文字自体を参照する場合は、それらの前に「\」を付ける必要があります。正しい置換正規表現は次のようになります。
$string =~ s/\^\[\(3B//g
すべてのオカレンスを置き換えたい場合。