0

perl で sed を使用して、いくつかのファイルで ^[(s3B を空の文字列に置き換えようとしています。

s/^[(s3B// がうまく動かないので、他に何を試してみようか考え中です。

4

4 に答える 4

2

特殊文字を引用する必要があります:

 $ 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 
于 2013-05-06T13:39:13.003 に答える
1

問題は、正規表現で特別な意味を持つ文字がいくつかあることです。^は行頭アンカーであり[、文字クラスを(開き、キャプチャを開きます。

Perl 文字列の英数字以外は、前に を付けることですべてエスケープできるため、\Q安全に使用できます。

s/\Q^[(s3B//

これは同等であり、より読みやすい

s/\^\[\(s3B//
于 2013-05-06T15:02:01.157 に答える
1

ANSI シーケンス (xterm カラー シーケンス、エスケープ シーケンス) を扱っている場合、^[ は '^' の後に '[' が続くのではなく、印刷できない文字 ESC、ASCII コード 0x1B です。

その文字を sed 式に入れるには、GNU sed で \x1B を使用するか、http://www.cyberciti.biz/faq/unix-linux-sed-ascii-control-codes-nonprintable/を参照してください 。Bash の行編集で ctrl+v を使用して、特殊文字をコマンド ラインに直接挿入することもできます。

于 2013-05-06T15:24:06.400 に答える
0

正規表現では、「^」、「[」、「(」(およびその他の多く) は特別な正規表現機能に使用される特殊文字です。文字自体を参照する場合は、それらの前に「\」を付ける必要があります。正しい置換正規表現は次のようになります。

$string =~ s/\^\[\(3B//g

すべてのオカレンスを置き換えたい場合。

于 2013-05-06T13:42:22.157 に答える