2012-03-05 47 views
0

我試圖在XML文件中找到一些文本,並刪除只有一行的一部分。
我發現這種格式嘗試:perl -p -i -e "s/$1/$2/g" $3一些代碼搜索後。如何使用perl one liner刪除文件中的特定文本?

所以我用這個代碼:

perl -p -i.bak -e "s/\'../../../specialText/\'//g" "C:/box/fileName.XML"; 

我想要做的就是刪除一切從內單引號,如: 「../../../specialText/」,但使用q()或\'來逃避報價不起作用,我不確定..'s是不是搞砸了事情。我猜測,如果不將任何東西放入文本替換內容中,將會將其正確刪除,但我不確定。

的錯誤是:(?之前缺少操作符\)

  1. 反斜槓發現其中運營商預計將在-e 1號線,近 「/ SPECIALTEXT/\」

  2. 在 語法錯誤 - e行1,接近 「/ SPECIALTEXT/\」

  3. 無法找到字符串結束 「'」 在-e行EOF之前的任何地方1.

如何重寫這一個班輪來完成這個?

This works。

C:\box>perl -p -i.bak -e s/Copyright/bar/g Test.txt 

我試圖在另一個文件,所以現在我只是發揮它改變我原來的。

回答

1

使用另一組分隔符有什麼問題?

perl -p -i.bak -e "s{'../../../specialText/'}{}g" "C:/box/fileName.XML" 
+0

我越來越沒有這樣的文件或目錄。我在Windows 7盒子上使用ActivePerl。這是一個設置問題嗎? – 2012-03-05 21:08:21

+0

然後檢查文件名,因爲代碼有效。 )順便說一句,當測試這個單線程時,發生在我身上;原來我把.pl文件和.pdf文件混淆了。 ) – raina77ow 2012-03-05 21:11:43

+0

我把分號';'在語句的結尾處,當您運行命令行時不需要該語句。 – 2012-03-06 01:13:09

3

您可以通過他們每個人面前放一個反斜槓(\)逃避搜索字符串的./字符。

然而,爲了避免急性leaning toothpick syndrome,我建議,而不是使用替代正則表達式分隔符和\Q\Eescape sequences,像這樣:

perl -p -i.bak -e "s(\Q'../../../specialText/'\E)()g" "C:/box/fileName.XML" 
相關問題