2017-10-13 74 views
2

我正在嘗試grep對另一個文件的文件;但是,我在一行上遇到多個條目時遇到問題。在線上擦除多個條目

這是我設置的一個簡單的例子:

grep -of <(echo "VHDL\nC++\nHello") <(echo "C++ VHDL") 

其輸出

VHDL 

當我試圖得到它的輸出

C++ 
VHDL 

感謝。

編輯:我使用的是BSD grep,而不是GNU grep,它按需要工作。

+1

你測試過'echo「VHDL \ nC++ \ n你好嗎?提示:'echo'不解釋反斜槓轉義。 –

+0

@BenjaminW。我正在使用打印新行字符的BSD'echo'。 – sbdchd

+0

如果使用Bash,'echo'使用內建函數(它不會解釋沒有'-e'選項的反斜槓轉義符),而不是系統命令。你似乎在使用Bash,因爲流程替換是Bashism。 'type echo'返回什麼? –

回答

0

您的方法是有效的。但是,您的echo "VHDL\nC++\nHello"只輸出一行,而不是三行。發生這種情況是因爲echo不能解釋轉義字符,所以您需要使用一些機制將它們插入到流中。假設你使用bash:

$ grep -of <(echo $'VHDL\nC++\nHello') <(echo "C++ VHDL") 
C++ 
VHDL 
+0

我正在使用BSD'echo'來輸出新行。雖然,這個命令與linux grep配合使用,但它不能像預期的那樣使用BSD grep,問題在於。 – sbdchd

+1

哪個BSD和shell? FreeBSD和bash沒有爲我回應新的內容。 – bishop

+1

原來我沒有使用系統的BSD回顯,我使用'zsh'的回顯打印新行。你是對的。 BSD回顯不打印換行符。另外,bash也不會打印新行。 Zsh似乎是奇怪的一個。 – sbdchd