我想将块大小转换为MB。我在替换中使用了/e
选项。当我在替换部分添加起始MB时,它会给我错误。
e.g:
这很有效。
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.
任何帮助修复第二个?
答案 0 :(得分:6)
更改
(1024*1024*2) MB $2
到
(1024*1024*2)."MB".$2
/e
修饰符告诉引擎将替换字段视为Perl代码。
答案 1 :(得分:3)
/e
开关将replace表达式转换为常规perl表达式。您需要引用' MB'
并使用连接(.
)。
's#(\d+)(\s+SELECT)#$1/(1024*1024*2) . q[ MB] . $2#e
应该工作。