sed는 문자 앞뒤의 모든 것을 제거합니다.

sed는 문자 앞뒤의 모든 것을 제거합니다.

나는 이것을 안드로이드에서 실행하고 있습니다.

주문하다:

dumpsys activity activities | grep mFocusedApp

산출:

mFocusedApp=ActivityRecord{273535b u0 com.any.some/.app.AnyActivity t5595}

예상되는:

com.any.some

sed 또는 기타 직접 명령을 통해 패키지 이름이 필요합니다.


편집하다(댓글에서 복사했습니다.답변;결과 문자열이 명령에 인수로 전달되어야 함을 명확히 하기 위해 추가되었습니다. )

현재 초점을 맞춘 애플리케이션을 다시 시작해야 하므로 패키지 이름을 얻은 후 다음과 같이 전달 am stop하고 중지 해야 합니다 am start.

am stop com.any.some && am start com.any.some

답변1

GNU 사용 grep:

focusApp=$(
  dumpsys activity activities |
    grep -Po '^mFocusedApp=\S+\{\S+ \S+ \K[^\s/]+'
)

기준:

focusApp=$(
  dumpsys activity activities |
    sed -n 's/^mFocusedApp=[^ ]\{1,\}{[^ ]\{1,\} [^ ]\{1,\} \([^\s/]+\).*/\1/p'
)

답변2

아마도

dumpsys activity activities | grep '^mFocusedApp=' | sed 's#.* \([^ ]*\)/.*#\1#'

정규 표현식은 및 사이에 공백이 아닌 모든 문자와 일치합니다 /.

시험용

echo 'mFocusedApp=ActivityRecord{273535b u0 com.any.some/.app.AnyActivity t5595}' |sed 's#.* \([^ ]*\)/.*#\1#'

산출:

com.any.some

(모든 관련 입력에 대해 이것이 작동하는지 확인하려면 더 많은 예제가 필요합니다.)


댓글에 답장:

다른 명령에 패키지 이름을 사용하려면 출력을 변수에 저장할 수 있습니다.

package=$(dumpsys activity activities | grep '^mFocusedApp=' | sed 's#.* \([^ ]*\)/.*#\1#')
am stop "$package" && am start "$package"

답변3

이것이 왜 출력이어야 하는지는 말하지 않았지만 다음은 여러분이 원하는 것을 추측하는 것입니다.

dumpsys activity activities| awk -F'[ /]' '/^mFocusedApp=/{print $3}'
com.any.some

답변4

stdin=$(
  dumpsys activity activities |
    grep mFocusedApp |
    cut -d "{" -f2 |
    cut -d " " -f3 |
    cut -d "/" -f1
)
am force-stop "$stdin" && am start "$stdin"

휴, 모두 고마워요

관련 정보