2017-10-13 129 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