2013-05-06 47 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將特殊字符直接插入命令行。