sed使用简单的正则表达式检查用字符串替换整行

时间:2014-08-12 14:32:25

标签: sed

我使用cordova为Android构建应用程序,但无法在AndroidManifest.xml文件中设置android:minSdkVersion。

所以每次我开始使用我编写的脚本构建应用程序时,我决定修改此文件。

我想更改一行:

<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />

到此:

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />

由于cordova不允许我使用config.xml设置它(只允许使用phonegap构建,但我只使用cordova),我需要自己修改xml。

我想将mindSdkVersion中的内容替换为14。

我该怎么做?

我试过了:

sed 's/minSdkVersion="(.*)"/minSdkVersion="14"/g' AndroidManifest.xml

但它仍然使我的uses-sdk行保持不变。

我的正则表达式出了什么问题?

2 个答案:

答案 0 :(得分:1)

三件事:

  1. 您需要使用(.*)
  2. 替换\(.*\)来修改群组
  3. 你不需要这个小组。
  4. 你匹配太多,试试

    sed 's/minSdkVersion="[0-9]+"/minSdkVersion="14"/g' AndroidManifest.xml

  5. 如果要修改文件,请使用-i更改文件。

答案 1 :(得分:1)

你的正则表达式存在两个问题。

  1. 括号显然被sed方言解释为字面括号。无论如何它们都是无用的,所以你不需要修复它 - 只需删除它们。

  2. .*贪婪,并且会在 last 双引号之前匹配。

  3. 通过这些评论,修复很容易。

    sed 's/minSdkVersion="[^"]*"/minSdkVersion="14"/g' AndroidManifest.xml