场景1:
- Windows的findstr命令
- Linux的grep命令
场景2:Java的String类
- public boolean matches(String regex)
- public String[] split(String regex)
- public String[] split(String regex, int limit)
- public String replaceFirst(String regex, String replacement)
- public String replaceAll(String regex, String replacement)
场景3:Java的Pattern类和Matcher类
- public final class Pattern extends Object implements Serializable
- public final class Matcher extends Object implements MatchResult
问题1:获取所有包名不带.的应用
- /v
- ^
adb shell pm list packages | findstr /v "[.]"
问题2:获取联网应用的PID
adb shell lsof | findstr IPv
C:>adb shell lsof | findstr IPv ims_rtp_daemon 3504 radio 19u IPv6 0t0 205132 UDP []:38088->[]:0 ims_rtp_daemon 3504 radio 20u IPv6 0t0 205136 UDP []:45658->[]:0 droid.bluetooth 4216 bluetooth 131u IPv4 0t0 665124 TCP :8872->:0 (LISTEN)
思路1:lsof提取PID(字符串分割)
- 为啥s* 匹配结果一个一个字符
public class Test {
public static void main(String[] args) {
String s = "ims_rtp_daemon 3504 radio 19u IPv6 0t0 205132 UDP []:38088->[]:0";
String[] s1 = s.split("\s+");
String[] s2 = s.split("\s*");
for (String s3 : s1) {
System.out.println(s3);
}
for (String s3 : s2) {
System.out.println(s3);
}
}
}
参考资料:
JAVA正则表达式匹配多个空格_予亭的博客-CSDN博客_正则匹配空格
思路2:lsof 提取 PID(字符串替换)
public class Test {
public static void main(String[] args) {
String s1 = "ims_rtp_daemon 3504 radio 19u IPv6 0t0 205132 UDP []:38088->[]:0";
while (s1.contains(" ")) {
s1 = s1.replace(" ", " ");
}
System.out.println(s1);
}
}
问题X:从PID、NAME中提取NAME
adb shell ps -o PID,NAME | findstr "\s+"
1 init 10 [rcu_tasks_kthre] 126 [kblockd] 1053 [f2fs_ckpt-254:1] 10148 com.android.smspush
问题3:获取使用sharedUserId的应用列表
adb shell dumpsys package | findstr "Package.[ sharedUser"
C:>adb shell dumpsys package | findstr "Package.[ sharedUser"
Package [com.sohu.inputmethod.sogou.oem] (48b19f8):
Package [com.zte.videoeditoroverLayZTEColor] (287a437):
Package [com.zte.videoeditoroverLayZTEShape] (c5ea6c2):
Package [com.android.cts.priv.ctsshim] (5208709):
Package [com.android.internal.systemui.navbar.gestural_indicator] (9933d3c):
Package [com.yulore.framework] (362834b):
Package [com.mifavor.callsettingoverLayZTEColor] (fb50fe6):
Package [com.mifavor.callsettingoverLayZTEShape] (d034d7d):
Package [com.android.phone.overlay.common.vendor] (d4abd40):
Package [com.zte.mifavor.zsearch] (816f61f):
Package [com.android.providers.telephony] (ef013a9):
sharedUser=SharedUserSetting{921efca android.uid.phone/1001}
Package [com.android.dynsystem] (be2e2d3):
sharedUser=SharedUserSetting{dbd09b1 android.uid.system/1000}
Package [com.zte.videoplayeroverLayZTEColor] (c36fe04):
Package [com.zte.videoplayeroverLayZTEShape] (464b0b3):
Package [com.vertu.personalizationwidget] (b5f8a6e):
Package [com.android.providers.calendar] (2efcfa5):
问题4:获取SharedSystemUid的所有应用
adb shell dumpsys package shared-users | findstr "SharedUser.[ userId PackageSetting"
C:>adb shell dumpsys package shared-users | findstr "SharedUser.[ userId PackageSetting"
SharedUser [android.media] (594e5d):
userId=10174
PackageSetting{10e41d3 com.android.mtp/10174}
PackageSetting{1b789fc com.android.providers.media/10174}
PackageSetting{2096f49 com.android.providers.downloads/10174}
PackageSetting{b08a719 com.android.providers.downloads.ui/10174}
PackageSetting{bce3a7d cn.nubia.filebrowser/10174}
PackageSetting{bcfd116 com.android.soundpicker/10174}
SharedUser [com.qualcomm.location.xt.optin] (a6fabe8):
userId=10297
PackageSetting{401f746 com.qualcomm.location.XT.setup/10297}
SharedUser [com.redteamobile.virtual.softsim] (9668b1b):
userId=10326
PackageSetting{a82b4f6 com.redteamobile.roaming/10326}
SharedUser [android.uid.networkstack] (c07c5fd):
userId=1073
PackageSetting{7a1facb com.android.networkstack.permissionconfig/1073}



