首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用SED将等于后的值移动到匹配的文件

使用SED将等于后的值移动到匹配的文件
EN

Stack Overflow用户
提问于 2014-07-29 17:14:47
回答 1查看 217关注 0票数 1

在将keystorePass值从一个server.xml移动到另一个server.xml时,我尝试了多种方法。我对sed不是很在行,但我尝试过多种方法,包括使用模式,我还使用grep将带有密钥存储密码的特定行移到空白文件中,并将行移到新的server.xml,但这也不起作用。每个人都可能已经知道server.xml通常包含什么内容了,但是这里是我需要修复的部分的一个例子。

**

代码语言:javascript
运行
复制
keystoreFile="/etc/blank"
keystorePass="BLAH" sslProtocol = "TLS" />

**

现在,当我们交付一个构建时,我们有自己的一组server.xml,它只适用于我们的服务器,但是当我们的用户部署它时,它们使用的是不同的keystorePass。我只是让它在构建完成后将文件移回原来的位置,但有时我们需要对文件进行一些编辑,因此必须对其进行替换。

总之,我需要在keystorePass=之后的密码在server.xml1中取代server.xml2中的密码

代码语言:javascript
运行
复制
server.xml1 (Test)
keystoreFile="/etc/blank/"
keystorePass="BadPassword" sslProtocol = "TLS" />


server.xml2 (Customer)
keystoreFile="/etc/blank/"
keystorePass="GoodPassword" sslProtocol = "TLS" />
EN

Stack Overflow用户

回答已采纳

发布于 2014-07-29 18:37:57

我读到您的问题的方式是,您希望将"BadPassword“从server.xml1复制到server.xml2中的"GoodPassword”。如果是这样,那么使用以下简短的脚本:

代码语言:javascript
运行
复制
#!/bin/bash
password=`grep keystorePass= old.xml | awk -F\" '{print $2'}` 
cat old.xml | sed 's/@PASSWORD@/$password/' > server.xml.bak
mv server.xml.bak server.xml

这将将keystorePass="和下面的"之间的任何字符串从server.xml1写入server.xml2

注意:这假设密码可以是除引号([^"])以外的任何字符。另外,保存脚本后,请确保运行chmod +x script_name.sh,然后使用./script_name.sh运行脚本。

我会创建一个文件虚拟文件来测试脚本,然后再对真实的脚本进行测试。如果我误解了你的问题,请告诉我。

您也可以尝试下面的较短版本。

警告:它可能存在一些问题,取决于您的bash版本

代码语言:javascript
运行
复制
#!/binbash
passwd=$(sed -nr 's/keystorePass="([^"]*).*/\1/p' server.xml1)
sed -i.xml -r "s/(keystorePass=\")[^\"]*(.*)/\1"$passwd"\2/" server.xml2 
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25021221

复制
相关文章

相似问题

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