2014-04-29 40 views
2

這完全無用的命令排除任何管道傳遞到grep,符合市場預期:的grep -v不工作

$ man man | grep -v '.*' 
$ 

我如何獲得從管道bind -p這個輸出?

$ bind -p | grep -v '.*' 
"?": self-insert 
"?": self-insert 
"?": self-insert 
"?": self-insert 
"?": self-insert 
(227 more...) 

退出代碼爲0,沒有寫入stderr。

+2

嘗試'bind -p 2>/dev/null | grep -v'。*''。祝你好運。 – shellter

+2

爲了解釋@hellter的答案,管道採用標準輸出並將其輸入到下一個命令中。但它對標準錯誤沒有任何作用,所以你會看到顯示的內容。 2>將標準錯誤重定向到一個文件,在這種情況下/ dev/null(即丟棄它) –

+0

好想法,但不是問題。退出代碼是0,沒有寫入stderr。 –

回答

2

在我的機器上,您的"?"實際上是"�"。這是UNICODE字符在解碼失敗時用作回退。

看起來像bind -p輸出無效的UTF-8序列,並且grep -v '.*'不會對它們進行過濾,因爲它無法解碼它們。

+0

哇,有趣。任何想法如何根據需要過濾? –

+0

+1非常好的趕上! – tripleee

+0

@Raine,我不認爲通常的工具可以強制處理無效輸入(這些UTF-8序列),因爲那樣會非常危險:你不能依賴你無法正確解碼的數據。我也沒有找到一種方法將它們放在「二進制模式」中。在這個階段,我會建議使用Python,Perl或其他任何類型的腳本編寫腳本。 –