And*_*Guy 32 grep android text file logcat
我想grep adb logcat并将输出写入文本文件.如果我这样做
./adb logcat > std.txt
Run Code Online (Sandbox Code Playgroud)
它将整个日志写入文本文件&如果我这样做
./adb logcat | grep ABC
Run Code Online (Sandbox Code Playgroud)
它将包含ABC的所有行打印到我的终端.但现在我希望搜索ABC并将这些行只写入文本文件.
./adb logcat | grep ABC > std.txt
Run Code Online (Sandbox Code Playgroud)
不起作用.Plz的帮助.
Brt*_*tle 52
我认为grep缓冲存在问题.你可以尝试这样的事情:
./adb logcat | grep --line-buffered ABC > std.txt
Run Code Online (Sandbox Code Playgroud)
链式grep应该是同样的问题.
编辑:类似的问题可以在这里找到:为什么两次使用grep时没有显示输出?.
编辑:这似乎有效
./adb logcat |grep --line-buffered ABC >a.txt
Run Code Online (Sandbox Code Playgroud)
我可以向你解释这里发生了什么。希望有人可以从中得出解决方案。如果您在终端中运行以下命令
cat |grep "ABC"
Run Code Online (Sandbox Code Playgroud)
并开始输入文本行,您可以看到 grep 立即输出包含的任何行。
cat somefile.txt | grep "ABC"
Run Code Online (Sandbox Code Playgroud)
将按预期将包含“ABC”的所有行打印到终端。
但如果你跑
cat |grep ABC >a.txt
Run Code Online (Sandbox Code Playgroud)
并开始在终端上输入文本,您可以看到文件没有写入,直到您输入 EOF 字符(Ctrl+D)并使 cat 终止。
但是使用 --line-buffered 以预期的方式给出输出
cat |grep --line-buffered ABC >a.txt
Run Code Online (Sandbox Code Playgroud)
这对我有用:
./adb logcat | grep ABC | dd of=/home/levex/dump.txt
说明: ./adb logcat打开 logcat,然后它通过一个管道grep ABC过滤出包含 的行ABC,然后再次通过一个管道dd of=/home/levex/dump.txt最终将其打印到文件中。 of=xxx参数设置输出文件。