grep adb logcat并将输出写入文本文件

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时没有显示输出?.


Vis*_*d R 6

编辑:这似乎有效

 ./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)


Lev*_*usa 5

这对我有用:

./adb logcat | grep ABC | dd of=/home/levex/dump.txt

说明: ./adb logcat打开 logcat,然后它通过一个管道grep ABC过滤出包含 的行ABC,然后再次通过一个管道dd of=/home/levex/dump.txt最终将其打印到文件中。 of=xxx参数设置输出文件。