Shell脚本 | 截取包名
之前写 shell 脚本的几篇文章都是先大致介绍脚本的功能和写法,然后一股脑的给出完整的代码。并没有细致入微的解释脚本中的每一行是如何思考如何编写的。
今天反其道而行之,只介绍一行代码。争取能讲的清楚明白,让大家了解我在写这行代码时的思路。
说说这行代码的作用吧:通过反编译工具 apktool 将 apk 文件反编译后,得到的文件中有一份 AndroidManifest.xml。希望从这份文件中获取到 apk 的包名(Package Name)。
首先,我需要确定每个 apk 反编译后拿到的 AndroidManifest.xml 格式是否一致。所以,我选了 BAT 三家大厂的代表作品,通过 apktool 将它们的 apk 反编译后,发现 AndroidManifest.xml 都是一样的格式。并且包名就在首行。这下就好办了。

鉴于它们三家的 AndroidManifest.xml 格式都一样,我就随便选了 QQ 的 AndroidManifest.xml 当作模版进行脚本编写吧。

以下是编写思路:
1、因为包名在首行,所以先把第一行字符给提取出来;
sed -n '1p' AndroidManifest.xml

2、包名所在列和其他几列通过空格隔开的,那就可以把每一列转成单独的行;
sed -n '1p' AndroidManifest.xml | awk '{for(i=1;i<=NF;i++){print $i;}}'

3、因为只有包名这一列含有"package"一词,所以可以过滤出这行;
sed -n '1p' AndroidManifest.xml | awk '{for(i=1;i<=NF;i++){print $i;}}' | grep "package"

4、过滤后的这行,包名包含在两个双引号之间,通过将双引号作为截取字符即可将这行分为三部分,输出第二部分即为包名。
sed -n '1p' AndroidManifest.xml | awk '{for(i=1;i<=NF;i++){print $i;}}' | grep "package" | awk -F '"' '{print $2}'

第四步结束,这个截取包名的脚本也就写完了。
欢迎关注微信公众号"测试开发Stack"
Shell脚本 | 截取包名的更多相关文章
- linux shell脚本通过参数名传递参数值
平常在写shell脚本都是用$1,$2....这种方式来接收参数,然而这种接收参数的方式不但容易忘记且不易于理解和维护.Linux常用的命令都可指定参数名和参数值,然而我们怎样才能给自己的shell脚 ...
- Shell脚本 | 性能测试之启动流量
安卓应用的流量统计有多种方式,点击「阅读原文」可以看到一篇别人写的文章,关于安卓流量数据的获取,写的挺全的,列举了几种不同方式的优劣.(见文末参考链接) 今天我要分享的是通过脚本一键获取应用的启动流量 ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- shell脚本入门
什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch ...
- 30分钟快速学习Shell脚本编程
什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch ...
- Shell脚本1
1Shell编程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell脚本 Shell 脚本(shell scr ...
- Shell脚本编程30分钟入门(小结)(转)
原文链接https://www.jb51.net/article/161028.htm 什么是Shell脚本 Shell脚本(英语:Shell script),又称Shell命令稿.程序化脚本,是一种 ...
- liunx shell 脚本的基础知识
Shell脚本编程30分钟入门====================## 什么是Shell脚本### 示例看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell ...
- Shell教程1-第一个Shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了.输入一些代码: #!/bin/bash ...
随机推荐
- vue-router 动态添加 路由
动态添加路由可以用了做权限管理.登录后服务器端返回权限菜单,前端动态添加路由 然后在设置菜单 1.vue-router 有方法router.addRoutes(routes) 动态添加更多的路由规则 ...
- logback log4j log4j2 性能实测
logback log4j log4j2 性能实测 转载: https://blog.souche.com/logback-log4j-log4j2shi-ce/ 日志已经成为系统开发中不可或缺的一部 ...
- android studio Error:Execution failed for task ':app:processDebugResources'. > com.android.ide.common.process.ProcessException: Failed to execute aapt
情况很奇怪 我是更新版本; 问题解决: clean project; 可能是编辑器有地方存有配置数据;
- Spring 系列目录
Spring(https://spring.io/) 系列目录 第一篇:Spring 系列 第一章 Spring Core (1) Convert 1.1.1 Spring ConversionSer ...
- ----一个roadmap----
在课上了解到了学web前端三个基础,HTML.CSS.JS 从HTML开始,逐步学习CSS.JS 大致写了一个roadmap(应该是roadmap喔 就是这样,以后可能会来更错或者更新 对没错我来更错 ...
- [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creator【s
问题:执行创建函数的sql文件报错如下: [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA ...
- web安全基础
web安全备忘 主机系统安全防护:防火墙控制 Web是一个分布式系统,一个站点多个主机布置,一主机布置多个站点:并发,异步,同步 主机安全配置文件修改与强化 web站点数据验证逻辑的常用技巧:功能性代 ...
- issue:ssh自动断开
使用ssh连接云服务器的时候,几分钟不操作terminal就会卡住,实际上ssh连接已经断开了,感觉很不爽.(可能云服务器供应商在系统中做了设置) 解决办法: step1:vim /etc/ssh/s ...
- UWP忽略短时间内重复触发的事件
原链接:UWP忽略短时间内重复触发的事件 - 超威蓝火 做移动端开发的可能都会遇到这种需求,当用户点击一个按钮之后,由于没有异步,或者设备性能很差等等原因,程序卡住了.但是用户不知道是咋回事啊,就开始 ...
- c# 遍历所有安装程序 获取所有已经安装的程序
/// <summary> /// 获取所有已经安装的程序 /// </summary> /// <param name="reg"></ ...