我想将一个指定的字符串附加到一个文件中,虽然这听起来像一个简单的任务 - 当然,我正在努力使这个工作。这是我的剧本:
TOMCAT_HOME=/home/osiris/Documents/work/sbr-brms/tomcat-script/apache-tomcat-8.0.22
BUSINESS_CENTRAL_USERS="<role rolename=\"admin\"/>
<role rolename=\"analyst\"/>
<user username=\"bpmAdmin\" password=\"password1!\" roles=\"admin,analyst\"/>"
#sed 's,<\/tomcat-users>, $BUSINESS_CENTRAL_USERS <\/tomcat-users>,' $TOMCAT_HOME/conf/tomcat-users.xml
#sed "s,<\/tomcat-users>, $BUSINESS_CENTRAL_USERS <\/tomcat-users>," $TOMCAT_HOME/conf/tomcat-users.xml
# awk -v r=$BUSINESS_CENTRAL_USERS '{ /<\/tomcat-users>/{print r}1}' $TOMCAT_HOME/conf/tomcat-users.x
第一个sed命令没有解析bash变量,所以它只输出$ BUSINESS_CENTRAL_USERS
第二个sed命令以: sed:-e表达式#1,char 45:未终止的's'命令
第三个awk命令以: awk:cmd。 line:1:rolename =“admin”/&gt; awk:cmd。 line:1:^语法错误
我相信这与事实有关,我想写入文件的字符串包含“和。我还没弄清楚如何正确地逃避它...
任何建议欢迎。
这是原始输入http://pastebin.com/ZbTWmn7m 这应该是预期的输出http://pastebin.com/Gxtptuq3
答案 0 :(得分:1)
看起来你正试图取代:
</tomcat-users>
使用:
<role rolename="admin"/>
<role rolename="analyst"/>
<user username="bpmAdmin" password="password1!" roles="admin,analyst"/>
</tomcat-users>
替换模式并打印所有行的sed命令是:
sed s/pattern/replacement/
在sed中转义字符有时会很棘手。
管道进入sed(单引号):
cat tomcat-users.xml | sed 's/<\/tomcat-users>/\n<role rolename="admin"\/>\n <role rolename="analyst"\/>\n <user username="bpmAdmin" password="password1!" roles="admin,analyst"\/>\n<\/tomcat-users>/'
直接使用sed(单引号):
sed -e 's/<\/tomcat-users>/\n<role rolename="admin"\/>\n <role rolename="analyst"\/>\n <user username="bpmAdmin" password="password1!" roles="admin,analyst"\/>\n<\/tomcat-users>/' tomcat-users.xml
答案 1 :(得分:0)
之前我有类似的要求,最后使用sed“c”命令稍微不同的方法来替换一系列行。我决定重写整个部分,使脚本具有幂等性。我还添加了一些验证,以确保我没有替换注释行。 -i执行就地替换。
S SR 60 HW