2014-01-17 62 views
1

我在命令行上運行perl -e以使用perls正則表達式功能在多個文件中查找和替換字符串。不過,我已經在一個腳本以及許多正則表達式測試器中測試了我的正則表達式,但它似乎無法在命令行上工作。所以我開始懷疑是否因爲它的命令行我需要逃避額外的字符。例如,我知道當我將它用作變量時,我必須逃避$,所以我想也許我需要在我的命令中使用它。我正在使用Linux。在命令行上運行perl -e時必須轉義哪些字符

繼承人我命令:

perl -pi -w -e 's/"flags" : {[^"]+"CP" : 1[^"]+"prop_name" : "ID"[^:]+: "SKU"/"flags" : {   "SET" : 1  },  "prop_name" : "ID",  "rule" : "SKU+ProductId"/gms;' *_input.xml 

我想匹配的部分:一部分是內部改爲

{ 
     "flags" : { 
     "CP" : 1 
     }, 
     "prop_name" : "ID", 
     "rule" : "SKU" 
    }, 

這樣:

{ 
     "flags" : { 
     "SET" : 1 
     }, 
     "prop_name" : "ID", 
     "rule" : "SKU+ProductId" 
    }, 
+1

*「似乎不起作用」*?小心解釋什麼不起作用,有什麼錯誤,你有什麼嘗試等? – grebneke

+0

有沒有可能包含比賽的例子以及如何修改? – abiessu

+2

這是Windows還是Linux? – AKHolland

回答

1

這是否工作您?由於您正在進行多行匹配,但perl one-liner每次只匹配一行,因此只要在輸入文件中輸入換行符,模式就會失敗。

perl -0777 -pi -w -e 's/"flags" : {[^"]+"CP" : 1[^"]+"prop_name" : "ID"[^:]+: "SKU"/"flags" : {   "SET" : 1  },  "prop_name" : "ID",  "rule" : "SKU+ProductId"/gms;' *_input.xml 

添加-0777使得perl使用整個文件進行輸入。有關更多信息,請參閱perlrun

+0

您好,先生,真棒謝謝你的回答和參考!我會把你稱爲佛,因爲我是開悟的。 – Rooster

+1

:)但是,即使是佛陀也無法理解爲什麼他看到JSON在XML文件中...... – grebneke

+0

600個文件需要編輯.... :( – Rooster

相關問題