Shell脚本 | 截取包名

以前写 shell 脚本的几篇文章都是先大体介绍脚本的功能和写法,而后一股脑的给出完整的代码。并无细致入微的解释脚本中的每一行是如何思考如何编写的。shell

今天反其道而行之,只介绍一行代码。争取能讲的清楚明白,让你们了解我在写这行代码时的思路。微信

说说这行代码的做用吧:经过反编译工具 apktool 将 apk 文件反编译后,获得的文件中有一份 AndroidManifest.xml。但愿从这份文件中获取到 apk 的包名(Package Name)。工具

首先,我须要肯定每一个 apk 反编译后拿到的 AndroidManifest.xml 格式是否一致。因此,我选了 BAT 三家大厂的表明做品,经过 apktool 将它们的 apk 反编译后,发现 AndroidManifest.xml 都是同样的格式。而且包名就在首行。这下就好办了。
测试

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

如下是编写思路:
一、由于包名在首行,因此先把第一行字符给提取出来;code

sed -n '1p' AndroidManifest.xml

二、包名所在列和其余几列经过空格隔开的,那就能够把每一列转成单独的行;xml

sed -n '1p' AndroidManifest.xml | awk '{for(i=1;i<=NF;i++){print $i;}}'

三、由于只有包名这一列含有"package"一词,因此能够过滤出这行;blog

sed -n '1p' AndroidManifest.xml | awk '{for(i=1;i<=NF;i++){print $i;}}' | grep "package"

四、过滤后的这行,包名包含在两个双引号之间,经过将双引号做为截取字符便可将这行分为三部分,输出第二部分即为包名。开发

sed -n '1p' AndroidManifest.xml | awk '{for(i=1;i<=NF;i++){print $i;}}' | grep "package" | awk -F '"' '{print $2}'

第四步结束,这个截取包名的脚本也就写完了。编译


欢迎关注微信公众号"测试开发Stack"

相关文章
相关标签/搜索