gpt4 book ai didi

bash - 重定向命令列表的输出

转载 作者:行者123 更新时间:2023-11-29 09:11:00 24 4
gpt4 key购买 nike

我正在使用 grep 在多个文件中提取匹配 0. 的行。对于不包含 0. 的文件,我希望它向文件输出“None”。如果找到匹配项,我希望它将匹配项输出到文件中。我有两个示例文件,如下所示:

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

在示例文件中,我将从 sea.txt 中获取两行输出,但从 land.txt 文件中,我将使用以下命令获取“None”代码:

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

双竖线 (||) 可以读作“do foo or else do bar”,或者“if not foo then bar”。它工作完美,但我遇到的问题是我无法让它输出匹配项(如在 sea.txt 文件中找到的)或“无”(如在 中找到的) code>land.txt file) 到一个文件。它总是打印到终端。我已经尝试了以下以及其他方法,但没有成功地将输出保存到文件中:

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

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

最佳答案

您可以 group使用 { } 的命令:

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

注意 ;,它在右大括号之前是必需的。

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

关于bash - 重定向命令列表的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34823534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com