기술나눔

adb shell logcat -b all|grep 두 개의 하위 문자열을 어떻게 grep할 수 있나요?

2024-07-06

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

존재하다adb shell logcat명령에 결합됨grep로그를 필터링할 때 두 개의 하위 문자열을 동시에 일치시키려면 파이프(|) 두 개grep연결하거나 사용하는 명령grep~의-E(또는egrep, 이는 다음과 같습니다.-E) 옵션을 사용하여 확장 정규식을 지원하므로 논리적 OR(|) 여러 패턴을 일치시킵니다.

방법 1: 2개 사용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다른 도구가 여러 줄 일치를 처리할 때까지 기다립니다. 이는 일반적으로 더 복잡하고 간단한 시나리오에는 필요하지 않습니다.

그러나 정규식에서 두 하위 문자열을 일치시켜야 하는 경우(그리고 두 하위 문자열이 같은 줄의 어느 위치에나 나타날 수 있음) 논리적 AND와 유사한 방식을 사용할 수 있습니다(실제로는 논리적 OR을 사용하지만).|, 그러나 두 하위 문자열이 모두 패턴에 나타나는지 확인하여):

 

bash复制代码

adb shell logcat -b all | grep -E '子串1.*子串2|子串2.*子串1'

이 명령은 "하위 문자열 1"이 먼저 나타난 다음 "하위 문자열 2"가 같은 줄에 나타나는 상황이나 "하위 문자열 2"가 먼저 나타난 다음 "하위 문자열 1"이 나타나는 상황과 일치합니다. 이 패턴에서는 두 하위 문자열이 서로 바로 인접해야 한다고 엄격히 요구하지는 않습니다. 두 하위 문자열 사이에 임의의 수의 문자가 있을 수 있습니다.서로 바로 옆에 필요한 경우 가운데 것을 제거할 수 있습니다..*