之前寫 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、包名所在列和其他幾列通過空格隔開的,那就可以把每一列轉成單獨的行;
3、因為只有包名這一列含有"package"一詞,所以可以過濾出這行;
sed -n '1p' androidmanifest.xml | awk '}' | grep "package"
4、過濾後的這行,包名包含在兩個雙引號之間,通過將雙引號作為擷取字元即可將這行分為三部分,輸出第二部分即為包名。
sed -n '1p' androidmanifest.xml | awk '}' | grep "package" | awk -f '"' ''
第四步結束,這個擷取包名的指令碼也就寫完了。 shell指令碼字元擷取
linux 的字串擷取很有用。有八種方法。假設有變數 var 1.號擷取,刪除左邊字元,保留右邊字元。複製 如下 echo 其中 var 是變數名,號是運算子,表示從左邊開始刪除第乙個 號及左邊的所有字元 即刪除 http 結果是 www.aaa.com 123.htm 2.號擷取,刪除左邊字元,保...
Shell指令碼 字串擷取
假設變數var值為 使用 與 或 的結合實現字串擷取 刪除變數var從左邊算起的最後乙個 字元及其左邊的內容,返回處理後的字串 echo 123.html 若在shell指令碼中,可將處理後的結果賦值給變數 刪除變數var從左邊算起第乙個 字元及其左邊的內容,返回處理後的字串 刪除變數var從右邊算...
shell指令碼字串擷取
假設有變數 var 1.號擷取,刪除左邊字元,保留右邊字元。echo 其中 var 是變數名,號是運算子,表示從左邊開始刪除第乙個 號及左邊的所有字元 即刪除 http 結果是 www.aaa.com 123.htm 2.號擷取,刪除左邊字元,保留右邊字元。echo 表示從左邊開始刪除最後 最右邊 ...