sed替换双引号内的内容

时间:2015-06-04 07:02:33

标签: regex bash sed

我需要使用sed。

从shell脚本替换xml文件中的versionName
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.sed"
    android:versionCode="1"
    android:versionName="UNKNOWN VERSION NAME">

我已经到目前为止搜索包含versionName的行,但是如何告诉sed替换版本名后面的双引号中的所有内容?

sed -i .old '/versionName/ s/WHAT TO WRITE?/NEW VERSION NAME/' AndroidManifest.xml

3 个答案:

答案 0 :(得分:2)

替换not-",如下所示:

sed -i .old '/android:versionName/ s/="[^"][^"]*"/="NEW VERSION NAME"/' AndroidManifest.xml

答案 1 :(得分:0)

@model IEnumerable<SurveyTool.Models.SURV_Question_Ext_Model>

<br />
<table class="strip">

    @foreach (var item in Model)
    {
        <tr>
            <td width="5%"></td>
            <td>
                @Html.ActionLink("QuestionLink", "Edit", "SURV_Answer", new { Language = item.Qext_Language }, null)
            </td>


        </tr>
    }

</table>
  • 假设所有包含sed 's/\([[:blank:]]android:versionName="\)[^"]*"/\1Your New Value"/' YourFile 的部分都将被更改
  • 使用GNU sed更好,将android:versionName替换为[[:blan:k]](如果直接修改避免临时文件,则为\(^\|[[:blank:]]\)

答案 2 :(得分:0)

考虑到xml的性质和版本号,使用更简单的命令实际上是非常安全的:

sed -i '/versionName/s/".*"/"NEW VERSION NAME"/' AndroidManifest.xml

P.S。在我看来,能够根据具体情况和合理的假设来简化shell脚本非常重要。