2013-03-20 44 views
0

解决SEE的评论如下Java exec grep | Linux的失败

好吧,这是一个棘手:

我从Java调用这个命令Process.exec()

grep -ne 'xxx\|yyy' file 

它只返回xxx

编辑︰我逃脱\\\在java中。

但是,当我在同一台机器上从命令行调用完全相同的命令时,它会按预期返回xxxyyy!?

我已经尝试了一切,逃逸多和少用-E,改变'"(事实上,奇怪的是,当您从Java运行要么不工作)?

有人跑到完全相同的奇怪问题?

+1

你可以试试这个命令:'grep -ne'xxx \\ | yyy'file'或者'grep -n -e'xxx'-e'yyy'file'? – anubhava 2013-03-20 19:50:35

+0

当然,我在\ java代码中\ \另外\ \这一切都无法工作。 – user951335 2013-03-20 19:59:10

+0

如果'|'必须在命令行上转义,则可能必须在Java字符串中使用3或4个'\'字符! – jahroy 2013-03-20 20:06:33

回答

1

你将不得不逃离“\”通过把“\\”如下:

.exec("grep -ne 'xxx\\|yyy' file"); 
1

这可能是一个愚蠢的问题,但为什么不使用的BufferedReader/readLine,然后String.indexOf或其他正则表达式,而不是炮轰到grep?

在搜索文件时,Grep可能比Java更快,但另一方面,从Java创建子进程可能会否定此处获得的任何好处。

+0

因为xxx和yyy很复杂,无论如何都需要regexp +该文件很大! – user951335 2013-03-20 20:16:59