파일에서 일치시킬 문자열이 주어지면 일치하는 문자열에서 특정 거리에 나타나지 않는 특정 줄을 어떻게 출력할 수 있습니까?

파일에서 일치시킬 문자열이 주어지면 일치하는 문자열에서 특정 거리에 나타나지 않는 특정 줄을 어떻게 출력할 수 있습니까?

제목이 본문을 많이 포착하지 못합니다. 수정 요청.


android.permission.CAMERA의 출력에서 ​​일치시키려는 문자열이 있습니다 adb shell dumpsys package. 내 목표는 해당 권한을 사용하는 응용 프로그램의 패키지 이름을 나열하는 것입니다 android.permission.CAMERA.

다음 예를 생각해 보세요. 이렇게 하면 다음과 같은 결과를 adb shell dumpsys com.google.android.GoogleCamera얻습니다.

패키지 [com.google.android.GoogleCamera](cbd5725):
  ...
  applicationInfo=ApplicationInfo{235b16ab com.google.android.GoogleCamera}
  ...
  dataDir=/data/data/com.google.android.GoogleCamera
  ...
  부여된 권한:
  ...
  ...
  안드로이드.허가.카메라
  ...

패키지 이름을 알고 있기 때문에 구체적인 예입니다. 원래 명령에는 adb shell dumpsys package권한이 표시됩니다.외., 설치된 모든 응용 프로그램 중에서.

제가 하고 싶은 것은 어떤 애플리케이션이 권한을 요청했는지 알아내는 것입니다 android.permission.CAMERA.

시스템에 설치된 다양한 응용 프로그램을 모두 고려하면 다음 사이에 고정된 거리가 없습니다.

  • Package [PKG_NAME] (ID):그리고android.permission.CAMERA
  • applicationInfo=ApplicationInfo{235b16ab PKG_NAME}그리고android.permission.CAMERA
  • dataDir=/data/data/PKG_NAME그리고android.permission.CAMERA

grep -Bn이는 적어도 출력에 사용할 수 없음을 의미합니다 .

이것은 확실히 가능하지만 어디서부터 시작해야 할지 모르겠습니다.

전체 덤프 adb shell dumpsys package:http://pasted.co/e0cd2d4d또는https://paste.ee/p/ylpax


중요한 점은 랩톱에서는 Slackware 14.1을 사용하고 루팅된 Android 장치에서는 COS12를 사용하고 있다는 것입니다.

답변1

awk작동할 수도 있습니다. 그것은 다음과 같습니다:

awk -v RS='^Package ' '/android\.permission\.CAMERA/ {print $1}'

이는 시작 부분의 행이 Package새 애플리케이션 설명의 시작을 표시한다고 가정합니다.

실제 내용을 보면 Package- 로 시작하지 않고 Package두 칸 들여쓰기되어 있습니다. 따라서 다음이 작동합니다.

awk -v RS='\n +Package' '/android\.permission\.CAMERA/{print $1}'

이는 레코드 구분 기호로 공백이 뒤따르는 개행 문자를 표시 Package하고 를 포함하는 항목을 필터링합니다 android.permission.CAMERA. 첫 번째 필드는 패키지 이름입니다. Verifiers:패키지 설명이 시작되기 전에 권한이 나열되므로 인쇄됩니다 .

답변2

perl -nE '/Package \[([^\]]+)/ and $p=$1; /android.permission.CAMERA/ and say $p' datfile

따라서 이것이 행을 일치시키는 것입니다 Package [...](패키지 이름을 $p역참조 변수 로 저장하면 $1문제가 많이 발생합니다). CAMERA행이 나타나면 내용을 내보냅니다 $p. ( CAMERA첫 번째 패키지 줄 앞에 줄이 나타나면 초기화되지 않은 경고 메시지와 함께 실패하고 BEGIN { $p = "dunno" }선행 하위 정의가 해당 줄을 수정합니다.) 이 작업은 에서도 쉽게 수행할 수 있지만 awk에서는 그렇지 않을 것 같습니다 awk.

(입력 데이터가 빈 줄로 구분되어 있을 경우, 내 답변에 ( ) 호출이 포함될 수 있습니다 perl -00.)perldoc perlrun

관련 정보