sed は文字の前後のすべてを削除します。

sed は文字の前後のすべてを削除します。

私はこれをAndroid上で実行しています。

注文する:

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"

ヒュー、みんなありがとう。

関連情報