我需要创建一个命令,使用grep实用程序在当前工作目录中的所有文件中搜索首字母缩略词EOF。此命令应重定向并将标准输出附加到名为results.txt的文件中,并将错误输出附加到名为error.txt的文件
我无法测试这些方案。这就是我有的可以有人请帮助我。
grep -r 'EOF' | cat > results.txt 2>> error.txt
当我测试这个结果时,.txt中有EOF。如果我在cat之后抛出-p(我假设的错误),它会删除results.txt。我试图测试error.txt。我只是想错了吗?
答案 0 :(得分:0)
grep -r 'EOF' | cat > results.txt 2>> error.txt
首先出现问题:
•-r
是递归标志 - 这将搜索当前和所有子目录中的所有文件。
•将results.txt
放在当前目录中,而将当前目录放入其中 - grep将在results.txt中找到已在其他文件中找到的结果。
•" UUOC" ...您不想通过cat
当前目录中的grep,将结果和错误放在其他位置(此处,放在父目录中)
grep 'EOF' * >> ../results.txt 2> ../error.txt
这将附加到results.txt,但覆盖error.txt >
是" on-to"覆盖文件,而>>
是"追加到"。
grep其他目录,将结果放在当前目录中
grep 'EOF' subdir/* >> results.txt 2> error.txt
这两个将为搜索目录中找到的任何目录吐出错误。
我更喜欢find
:
find ./subdir -type f -exec fgrep 'EOF' {} + >> results.txt 2> error.txt
仅在目录-type f
或fgrep中找到文件 ./subdir
和fgrep("已修复" grep,因为没有正则表达式,所以速度更快" EOF") - fgrep找到所有找到的文件,将输出和错误写入上述文件。
添加"深度"参数只搜索给定目录,而不是子目录:
find ./subdir -depth 1 -type f -exec (...etc...)