2013-03-20 65 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