2010-10-13 20 views
0

我想將塊大小轉換爲MB。我在替換中使用/e選項。當我在替換部分添加起始MB時,它會給我錯誤。爲什麼我的Perl單行報告「Bareword發現操作員期望的位置」?

例如:

這是有效的。

echo "16777216 SELECT" |perl -lane 's#(\d+)(\s+SELECT)#$1/(1024*1024*2)#e; print' 
8 

這給了我錯誤。

echo "16777216 SELECT" |perl -lane 's#(\d+)(\s+SELECT)#$1/(1024*1024*2) MB $2#e; print' 
Bareword found where operator expected at -e line 1, near ") MB" 
     (Missing operator before MB?) 
syntax error at -e line 1, near ") MB " 
Execution of -e aborted due to compilation errors. 

任何幫助修復第二個?

回答

3

/e開關將替換表達式轉換爲常規的perl表達式。您需要引用' MB'並使用級聯(.)。

's#(\d+)(\s+SELECT)#$1/(1024*1024*2) . q[ MB] . $2#e 

應該工作。

6

變化

(1024*1024*2) MB $2 

(1024*1024*2)."MB".$2 

/e修飾符告訴引擎對待替換字段爲Perl代碼。

+0

/e修飾符期望替換爲有效的可編譯代碼。 – 2010-10-13 13:25:29

+0

@davorg:即將改變這種情況。 – codaddict 2010-10-13 13:26:03

相關問題