linux - grep 实用程序并重定向和追加标准输出

标签 linux

我需要创建一个命令,该命令使用 grep 实用程序在当前工作目录中的所有文件中搜索首字母缩写词 EOF。此命令应将标准输出重定向并附加到名为 results.txt 的文件,并将错误输出重定向并附加到名为 error.txt 的文件

我在测试这些场景时遇到了问题。这就是我所拥有的,有人可以帮我解决这个问题。

grep -r 'EOF' | cat > results.txt 2>> error.txt

当我测试这个 results.txt 时,里面有 EOF。如果我在 cat 之后抛出一个 -p(我假定的错误),它会删除 results.txt。我正在尝试测试 error.txt。我只是在想这个错误的方式吗????

最佳答案

grep -r 'EOF' | cat > results.txt 2>> error.txt

问题优先:
-r 是递归标志——这将搜索当前目录和所有子目录中的所有文件。
• 将results.txt 放入当前目录 grep 当前目录— grep 将在results.txt 中找到它已经在其他文件中找到的结果。
“UUOC” ...您不想通过 cat

进行管道传输

grep 在当前目录下,将结果和错误放在其他地方(这里,放在父目录下) grep 'EOF' * >> ../results.txt 2> ../error.txt
这将附加到 results.txt,但覆盖 error.txt > 是“on-to”覆盖文件,而 >> 是“append-to”。

grep 其他目录,将结果放入当前目录
grep 'EOF' 子目录/* >> results.txt 2> error.txt

这两个将针对在搜索目录中找到的任何目录吐出错误。

我更喜欢find:
find ./subdir -type f -exec fgrep 'EOF' {} + >> results.txt 2> error.txt
仅在目录 ./subdir 和 fgrep(“固定”grep,它更快,因为没有正则表达式)中或下面查找 files -type f in "EOF") — fgrep 找到的所有文件,将输出和错误写入文件,如上所示。
添加“深度”参数以仅搜索给定目录,而不是子目录:
find ./subdir -depth 1 -type f -exec (...etc...)

关于linux - grep 实用程序并重定向和追加标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33181988/

相关文章:

linux - Git 从一个用户帐户 pull 到另一个用户帐户

linux - 尝试使用 "current"宏时出现编译错误

c++ - 使用 Clang 编译时,链接器无法在 64 位 Mint OS 下找到 32 位库

linux - Linux 上的 .Net Core 控制台应用程序不会作为服务运行

c - 将 mmap 与 PROT_NONE 与 PROT_READ 结合使用之间是否存在性能差异?保护写入

c - malloc 在哪里返回内存?

连接()错误: operation not permitted

ruby-on-rails - 将 Rails 应用程序分发为 native 应用程序

linux - 在变量中使用 sed 外壳子字符串

c++ - Linux C/C++ 键盘 ctrl+[somekey] 和 ctrl+alt+[somekey}