我需要创建一个命令,该命令使用 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/