2013-05-06 50 views
0

我试图用sed用Perl在几个文件中一个空字符串替换^ [(S3B替换^ [(S3B。使用SED与空白

S/^ [(S3B // ISN “T虽然工作,所以我不知道还有什么我可以尝试

+0

您可能需要转义括号。在他们面前添加一个\并尝试一下。 – 2013-05-06 13:39:35

+1

你能给我们多一点信息。你为什么使用sed和Perl?你能用Perl来做到这一点吗?你有什么尝试?你试过的结果是什么?它会帮助我们更好地理解你的问题。 – 2013-05-06 14:56:23

回答

1

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

您可以通过\Q前面逃避它在一个Perl字符串中的所有非字母数字,所以你可以放心地使用

s/\Q^[(s3B// 

这相当于,比

s/\^\[\(s3B// 
+1

为了完整性,您可以用'\ E'结束引用。 – 2013-05-06 15:27:07

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 
+0

我无法得到这个工作, 如果我有一个字符串像^ [(s3BThis是线 ,我想摆脱的人物,我就可以用命令: S/\^[[(] s3B // g – 2013-05-06 14:06:33

+0

我认为不同之处在于我的文件中没有任何空格分隔这些字词 – 2013-05-06 14:11:26

+0

您需要引用以下三个字符:^ [( – piokuc 2013-05-06 14:21:12

0

在正则表达式‘^’,‘[’和‘(’(和许多其他)是用于特殊正则表达式特征的特殊字符,如果你正在引用字符本身,你应该在它们之前加上“\” Cor rect替代reges将是:

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

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

+1

甚至更​​好:使用'\ Q'和'\ E'_quoting字符来关闭正则表达式magic:$ string =〜s/\ Q^[(s3B \ E //;'我也怀疑'^ [''不只是两个字符的字符串,而是一个转义字符 – 2013-05-06 14:55:46

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将特殊字符直接插入命令行。