重定向命令列表的输出

时间:2016-01-16 04:33:25

标签: bash grep

我使用grep在多个文件中提取与0.匹配的行。对于不包含0.的文件,我希望它输出"无"到一个文件。如果找到匹配项,我希望它将匹配项输出到文件中。我有两个看起来像这样的示例文件:

$ cat sea.txt 
shrimp  0.352
clam    0.632
$ cat land.txt 
dog 0
cat 0

在示例文件中,我将从sea.txt获得两行输出,但是从land.txt文件我将得到"无"使用以下代码:

$ grep "0." sea.txt || echo "None" 

双管(||)可以读作"做foo或者做bar"或者"如果不是foo那么bar"。它工作得很完美,但我遇到的问题是我无法输出匹配(如sea.txt文件中所示)或"无" (因为它会在land.txt文件中找到)到文件。它总是打印到终端。我已经尝试了以下以及其他没有运气保存到文件的运气:

grep "0." sea.txt || echo "None" > output.txt
grep "0." sea.txt || echo "None" 2> output.txt

有没有办法让它保存到文件?如果没有,我可以使用打印到终端的线路吗?

2 个答案:

答案 0 :(得分:6)

{ }可以使用group命令:

$ { grep '0\.' sea.txt || echo "None"; } > output.txt
$ cat output.txt
shrimp  0.352
clam    0.632

注意;,这在结束括号之前是必需的。

此外,我已将您的正则表达式更改为0\.,因为您希望匹配文字.,而不是任何字符(未转义的.所做的)。最后,我用单引号替换了引号 - 这在这里没有效果,但可以防止在较长的正则表达式中出现特殊字符的意外。

答案 1 :(得分:0)

怎么样?

echo $(grep "0." sea.txt || echo "None") > output.txt