0

我正在尝试使用 sed 和 perl 在几个文件中用空字符串替换 ^[(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

如果您正在处理 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 回答
1

问题是有几个字符在正则表达式中有特殊含义。^是一个行首锚点,[打开一个字符类,并(打开一个捕获。

您可以通过在 Perl 字符串前面加上 来转义所有非字母数字\Q,因此您可以安全地使用

s/\Q^[(s3B//

这相当于,并且比

s/\^\[\(s3B//
于 2013-05-06T15:02:01.157 回答
0

在正则表达式中,“^”、“[”和“(”(以及许多其他字符)是用于特殊正则表达式功能的特殊字符,如果您引用这些字符本身,您应该在它们前面加上“\”。正确的替换reges 将是:

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

如果你想替换所有的出现。

于 2013-05-06T13:42:22.157 回答