我使用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)
有没有办法让它保存到文件?如果没有,我可以使用打印到终端的线路吗?
你可以组用命令{ }:
$ { grep '0\.' sea.txt || echo "None"; } > output.txt
$ cat output.txt
shrimp 0.352
clam 0.632
Run Code Online (Sandbox Code Playgroud)
请注意;,在结束括号之前必须使用.
另外,我已经改变了你的正则表达式,0\.因为你想要匹配文字.,而不是任何字符(未转义的字符.).最后,我用单引号替换了引号 - 这在这里没有效果,但可以防止在较长的正则表达式中出现特殊字符的意外.
| 归档时间: |
|
| 查看次数: |
36 次 |
| 最近记录: |