perl调用java_Perl脚本在终端中运行,但在从Java程序调用时不运行

我正在运行一个Perl脚本,用另一个字符串替换字符串:

perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt

当我从终端运行此命令时,它很好地将给定文件中str1的所有出现替换为str2.当我从java运行它时它确实访问该文件但没有替换发生:

Runtime.getRuntime().exec("perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt");

>我确定它访问该文件(该文件似乎在gedit中编辑(需要重新加载)).

>我尝试了Java ProcessBuilder类,但结果却相同.

>当我使用Runtime.exec()或ProcessBuilder与其他命令(如gedit newFile.txt)时,它们运行良好.

>具有讽刺意味的是,我从java打印了上面的perl命令,并在终端中取出了粘贴,并完成了替换操作!

>使用这些命令没有异常或错误. (我用try和catch来确保这一点).

>我还在cmd中使用/usr/bin/perl而不是perl来确保执行perl cmd.

那么您认为问题是什么?

编辑:

我通过从java中的命令中删除引号来解决这个问题.感谢@ikegami的帮助.

所以工作版本是:

perl -pi.back -e s/str1/str2/g; path/to/file1.txt

代替

perl -pi.back -e 's/str1/str2/g;' path/to/file1.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值