首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >外壳脚本sed替换

外壳脚本sed替换
EN

Stack Overflow用户
提问于 2016-11-11 13:23:30
回答 2查看 230关注 0票数 0

我有这个文件config.xml

代码语言:javascript
运行
复制
<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做这件事,但没有成功。

我需要这样做:

代码语言:javascript
运行
复制
$./script.sh config.xml NEWPASSWORD

得到:

代码语言:javascript
运行
复制
<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="*" />

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-11 13:40:49

使用反向引用:

代码语言:javascript
运行
复制
sed "s/^\( *<enter>\)\([^>]*\)</\1$2</" "$1"
  • ^\( *<enter>\):从任意数量的空格开始搜索行,然后是<enter>。使用转义括号捕获匹配字符。
  • \([^>]*\)<:在第二个组中捕获下一个<上的字符。
  • \1$2<:在替换字符串中,输出来自第一组的字符(\1),然后是传递给脚本的第二个参数值($2,新密码值)

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

若要编辑文件的位置,请使用-i标志:

代码语言:javascript
运行
复制
sed -i "s/^\( *<enter>\)\([^>]*\)</\1$2</" "$1"
票数 1
EN

Stack Overflow用户

发布于 2016-11-11 14:38:56

好的结果是:

代码语言:javascript
运行
复制
$cat script.sh

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

然后:

代码语言:javascript
运行
复制
$./script.sh config.xml NEWPASSWORD

感谢每个人,尤其是肯纳沃兹。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40548958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档