我运行一个应用程序并将输出通过管道传输到grep
。这有效。但是,我希望在屏幕上显示输出并写入文件。
因此我将grep
结果传输至tee
:
./app | grep something | tee file.txt
但是,即使有 100% 的结果,这也不会显示(或写入)结果(我已经通过两个正在运行的实例证实了这一点)。
我如何 grep 应用程序的输出、写入文件并显示在屏幕上?
答案1
您所写的命令应该可以工作。该命令功能不正确可能有多种原因。
- 该应用程序将输出文本发送到标准以外的其他输出。
- 使用grep命令搜索的字符串输入错误。
案例 #1 的解决方案
- 手动检查应用程序是否将所需的文本发送到要搜索的输出。
./app
- 将输出文本重定向到文件
./app > file.txt
并检查文件的内容:cat file.txt
- 如果文件不包含所需的文本,则应用程序可能会将输出发送到错误输出,而不是标准输出。因此,请尝试以其他方式重定向到文件
./app 2 > file.txt
并再次检查文件的内容:cat file.txt
- 如果这次文件中的内容是正确的,那么解决办法就很简单了,只需要将错误输出重定向到标准输出即可。
./app 2>&1 | grep "something" | tee file.txt
案例 #2 的解决方案
- 仔细检查用作搜索模式的字符串。将其括在引号或撇号中,以排除对通配符、$variablename 变量、正则表达式等的随机误解。
- 首先使用 grep 测试搜索仅由字母或数字组成且不会被误解的非常简单的字符串。