我使用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
有没有办法让它保存到文件?如果没有,我可以使用打印到终端的线路吗?
答案 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