[英]Sed - Conditionally match and add additional string after the find
假設我在文件“config.xml”中有這樣一行
<widget android-packageName="com.myproject" android-versionCode="12334" ios-CFBundleIdentifier="com.myproject" ios-CFBundleVersion="12334" version="1.5.2" versionCode="1.5.2" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
而我想用sed中的一行命令改成這樣,就是在當前版本號后加“.1”:
<widget android-packageName="com.myproject" android-versionCode="12334" ios-CFBundleIdentifier="com.myproject" ios-CFBundleVersion="12334" version="1.5.2.1" versionCode="1.5.2.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
假設版本號可能會改變,這意味着我可能需要先將它作為“version=”和“””之間的字符串進行匹配,然后再添加一些內容。 我應該如何實現?
以答案的形式(錯誤地)顯示的嘗試代碼:
sed -i '' -e 's/\" versionCode=\"/\.1\" versionCode=\"/g' config.xml
sed -i '' -e 's/\" xmlns=\"/\.1\" xmlns=\"/g' config.xml
它與以下代碼一起使用,這是為了匹配它后面的小 substring:
sed -i '' -e 's/\" versionCode=\"/\.1\" versionCode=\"/g' config.xml
sed -i '' -e 's/\" xmlns=\"/\.1\" xmlns=\"/g' config.xml
您可以在以version
開頭的任何字段名稱的版本號中使用此sed
到 append .1
:
sed -i.bak -E 's/( version[^=]*="[.0-9]+)/\1.1/g' file
Output:
<widget android-packageName="com.myproject" android-versionCode="12334.1" ios-CFBundleIdentifier="com.myproject" ios-CFBundleVersion="12334" version="1.5.2.1" versionCode="1.5.2.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
分手:
(
: 開始捕獲組
version
:natch 文本version
[^=]*
: 匹配 0 個或多個不是=
的字符=
: 匹配一個=
"
: 匹配一個"
[.0-9]+
:匹配任何數字或點字符的 1+)
: 結束捕獲組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.