重定向命令列表的输出

Bat*_*ood 4 bash grep

我使用grep来拉出0.多个文件中匹配的行.对于不包含的文件0.,我希望它将"无"输出到文件.如果找到匹配项,我希望它将匹配项输出到文件中.我有两个示例文件,如下所示:

$ cat sea.txt 
shrimp  0.352
clam    0.632
$ cat land.txt 
dog 0
cat 0
Run Code Online (Sandbox Code Playgroud)

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

$ grep "0." sea.txt || echo "None" 
Run Code Online (Sandbox Code Playgroud)

double pipe(||)可以读作"do foo或者do bar",或者"if not foo then bar".它工作得很完美,但我遇到的问题是我不能让它输出匹配(如在sea.txt文件中找到的)或"无"(因为它会在land.txt文件中找到)到文件.它总是打印到终端.我已经尝试了以下以及其他没有运气保存到文件的运气:

grep "0." sea.txt || echo "None" > output.txt
grep "0." sea.txt || echo "None" 2> output.txt
Run Code Online (Sandbox Code Playgroud)

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

Ben*_* W. 6

你可以用命令{ }:

$ { grep '0\.' sea.txt || echo "None"; } > output.txt
$ cat output.txt
shrimp  0.352
clam    0.632
Run Code Online (Sandbox Code Playgroud)

请注意;,在结束括号之前必须使用.

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