簡體   English   中英

Sed - 有條件地匹配並在查找后添加額外的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM