我有这个文件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="*" />
答案 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。