在adb shell logcat
命令中结合grep
来过滤日志时,如果你想要同时匹配两个子串,你可以使用管道(|
)将两个grep
命令连接起来,或者使用grep
的-E
(或egrep
,它等同于-E
)选项来支持扩展的正则表达式,这样你就可以使用逻辑或(|
)来匹配多个模式了。
方法1:使用两个grep
命令
这种方法中,第一个grep
命令过滤出包含第一个子串的行,然后第二个grep
命令再从这些行中过滤出包含第二个子串的行。
bash复制代码
|---|-----------------------------------------------------|
| | adb shell logcat -b all | grep '子串1' | grep '子串2'
|
方法2:使用grep
的-E
选项
这种方法更简洁,因为它允许你在一个grep
命令中同时指定多个模式。
bash复制代码
|---|-----------------------------------------------|
| | adb shell logcat -b all | grep -E '子串1|子串2'
|
但请注意,上面的命令实际上会匹配包含"子串1"或"子串2"的行,而不是同时包含两者的行。如果你想要同时匹配两个子串,你应该这样写:
bash复制代码
|---|-----------------------------------------------------|
| | adb shell logcat -b all | grep '子串1' | grep '子串2'
|
或者使用grep
的-z
(注意:这不是标准grep
的一部分,但某些版本的grep
或zgrep
支持)或awk
等其他工具来处理多行匹配(这通常更复杂且不是简单场景所必需的)。
然而,如果你确实需要在一个正则表达式中匹配两个子串(并且这两个子串可以出现在同一行的任意位置),你可以使用逻辑与的模拟(虽然实际上你使用的是逻辑或|
,但通过确保两个子串都出现在模式中):
bash复制代码
|---|---------------------------------------------------------|
| | adb shell logcat -b all | grep -E '子串1.*子串2|子串2.*子串1'
|
这个命令会匹配在同一行中先出现"子串1"后出现"子串2",或者先出现"子串2"后出现"子串1"的情况。注意,这个模式并不严格要求两个子串必须紧挨着,它们之间可以有任意数量的字符。如果你需要它们紧挨着,你可以去掉中间的.*
。