我正在尝试使用perl来替换^ [(s3B在几个文件中包含空字符串。
s / ^ [(s3B //虽然不起作用,所以我想知道我还能尝试什么。
答案 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
如果您想要替换所有出现的事件。