PHP脚本执行sed命令异常:变量替换失效问题排查
问题分析与解决
问题出在exec('grep -oi "STRING1" FILE1 | wc -l')的返回值上——wc -l的输出会自带换行符,虽然echo($boo)时浏览器会自动忽略这个换行,但把它拼进sed命令后,换行符会破坏sed的语法结构,导致替换失败。
比如实际生成的sed命令会变成:
sed -i 1,20s/STRING2/27 / FILE2
这种换行后的语法是无效的,自然无法完成替换。而手动赋值$boo=3时,变量是纯数字,没有多余字符,所以sed能正常执行。
解决方法
给$onecount做空白字符清理,用trim()函数去掉换行、空格等多余字符:
$onecount=exec('grep -oi "STRING1" FILE1 | wc -l'); $boo=trim($onecount); // 关键是这一步 echo($boo); exec("sed -i 1,20s/STRING2/$boo/ FILE2");
这样$boo就变成了纯数字字符串,拼进sed命令后语法正确,就能完成替换了。
内容的提问来源于stack exchange,提问作者WillO
相关产品推荐
相关产品推荐

