问题
I want to convert block size into MB. I am using the /e
option in my substitution. When I add starting MB in substitution part it giving me the error.
e.g:
This works.
echo "16777216 SELECT" |perl -lane 's#(\d+)(\s+SELECT)#$1/(1024*1024*2)#e; print'
8
This giving me the error.
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.
Any help fixing the second one?
回答1:
The /e
switch turns the replace expression into a regular perl expression. You need to quote the ' MB'
and use concatenation (.
) .
's#(\d+)(\s+SELECT)#$1/(1024*1024*2) . q[ MB] . $2#e
Should work.
回答2:
Change
(1024*1024*2) MB $2
to
(1024*1024*2)."MB".$2
The /e
modifier tells the engine to treat the substitution field as Perl code.
来源:https://stackoverflow.com/questions/3923967/why-does-my-perl-one-liner-report-bareword-found-where-operator-expected