我运行一个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以确保这一点)。
- 我也用
/usr/bin/perl
,而不是perl
在cmd以确保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