shell脚本sed替换

时间:2016-11-11 13:23:31

标签: linux sed

我有这个文件config.xml

<widget id="com.example.hello" version="0.0.1">
<name>HelloWorld</name>
<description>
    A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="dev@callback.apache.org" href="http://cordova.io">
    Apache Cordova Team
</author>
 <enter>PASSWORD</enter>
<content src="index.html" />
<access origin="*" />

我尝试用sed做这件事但没有成功。

我需要这样做:

$./script.sh config.xml NEWPASSWORD

得到:

<widget id="com.example.hello" version="0.0.1">
<name>HelloWorld</name>
<description>
    A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="dev@callback.apache.org" href="http://cordova.io">
    Apache Cordova Team
</author>
 <enter>NEWPASSWORD</enter>
<content src="index.html" />
<access origin="*" />

2 个答案:

答案 0 :(得分:1)

使用反向引用:

sed "s/^\( *<enter>\)\([^>]*\)</\1$2</" "$1"
  • ^\( *<enter>\):搜索以任意数量的空格开头的行,后跟<enter>。使用转义括号捕获匹配的字符。

  • \([^>]*\)<:在第二组中捕获后面的上一个字符<

  • \1$2<:在替换字符串中,输出第一组中的字符(\1),然后输入传递给脚本的第二个参数值($2,新的密码值)

该命令应用于$1,该文件作为第一个参数传递给脚本(文件名)。

要编辑文件,请使用-i标记:

sed -i "s/^\( *<enter>\)\([^>]*\)</\1$2</" "$1"

答案 1 :(得分:0)

好结果是:

$cat script.sh

#!/bin/sh
file=$1
sed -i "s/^\( *<enter>\)\([^>]*\)</\1$2</" "$1"

然后:

$./script.sh config.xml NEWPASSWORD

非常感谢大家,尤其是Kenavoz。