我想grep adb-logcat并将输出写入文本文件。如果我只是这样做:
./adb logcat > std.txt
它将整个日志写入文本文件。如果我这样做:
./adb logcat | grep ABC
它将所有包含ABC的行打印到我的终端。但现在我想搜索ABC&只将这些行写入文本文件。
此:
./adb logcat | grep ABC > std.txt
不起作用。
正确的命令是什么?
我认为grep缓冲有问题。你可以试试这样的东西:
./adb logcat | grep --line-buffered ABC > std.txt
对于链式grep来说,这应该是同样的问题。
编辑:在这里可以找到一个类似的问题:为什么两次使用grep时都没有显示输出?。
编辑:这似乎工作
./adb logcat |grep --line-buffered ABC >a.txt
我可以向你解释这里发生了什么。希望有人能从中找到解决方案。如果您在终端中运行以下命令
cat |grep "ABC"
并开始输入文本行,您可以看到grep立即输出包含的任何行。
cat somefile.txt | grep "ABC"
将按预期将包含"ABC"的所有行打印到终端。
但是如果你运行
cat |grep ABC >a.txt
并开始在终端上输入文本,您可以看到,直到您输入EOF字符(Ctrl+D)并使cat终止,文件才被写入。
但是使用--line buffered以预期的方式输出
cat |grep --line-buffered ABC >a.txt
这对我有效:
./adb logcat | grep ABC | dd of=/home/levex/dump.txt
解释:./adb logcat
打开logcat,然后通过管道到达grep ABC
,CCD_3将行过滤为包含ABC
的行,然后再次通过管道到达CCD _5,最终将其打印到文件中。of=xxx
参数设置输出文件。
尝试adb logcat | grep ABC | tee out
试试这个
./adb logcat -s "ABC" > std.txt
类似的东西可能会查找单词时间、testapk1和testapk2 的所有条目
adb logcat -v time testapk1 testapk2 *:S -d > adblogfilter.log
将LogCat保存到文本文件
"要将LogCat保存到文本文件,请打开终端窗口并键入:adb-logcat-d>logcat.txt"
尝试这个
adb logcat -d -e "ABC" > std.txt