使用sed替换^ [(s3B与空格

时间:2013-05-06 13:36:31

标签: regex perl sed

我正在尝试使用perl来替换^ [(s3B在几个文件中包含空字符串。

s / ^ [(s3B //虽然不起作用,所以我想知道我还能尝试什么。

4 个答案:

答案 0 :(得分: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 

答案 1 :(得分:1)

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

你可以通过在\Q前加上Perl字符串中的所有非字母数字,以便安全地使用

s/\Q^[(s3B//

相当于

,并且比

更具可读性
s/\^\[\(s3B//

答案 2 :(得分: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将特殊字符直接插入命令行。

答案 3 :(得分:0)

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

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

如果您想要替换所有出现的事件。