我正在使用“sed”命令从linux shell脚本中的“.properties”文件替换字符串。问题是它没有显示双引号。
注意:我认为sed命令会忽略双引号,所以无论如何都要明确强制它不要忽略它。
“Shell脚本文件”
#!/bin/bash
# First Script
#Include Properties File
. directoryPaths.properties
sed -i "s#EPOLD#$EPNEW#" *Test*
属性文件:
EPNEW="jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue format="pox" "
文件:
<?xml version="1.0" encoding="UTF-8"?>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="Component">
<address uri=EPOLD/>
</endpoint>
当前结果:
<?xml version="1.0" encoding="UTF-8"?>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="Component">
<address uri=jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactoryGLBookingService_EPLOCALamp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactoryGLBookingService_EPLOCALamp;java.naming.provider.url=tcp://localhost:61616GLBookingService_EPLOCALamp;transport.jms.DestinationType=queue format=pox />
</endpoint>
预期结果:
<?xml version="1.0" encoding="UTF-8"?>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="Component">
<address uri="jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactoryGLBookingService_EPLOCALamp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactoryGLBookingService_EPLOCALamp;java.naming.provider.url=tcp://localhost:61616GLBookingService_EPLOCALamp;transport.jms.DestinationType=queue format="pox" " />
</endpoint>
答案 0 :(得分:2)
通过插入文字双引号来分配您的变量:
EPNEW='"jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue format="pox" "'
你的任务是:
EPNEW="jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue format="pox" "
这会将此值保留在EPNEW
:
jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue format=pox
答案 1 :(得分:1)
尝试使用sed:
中的引号sed -i "s#EPOLD#\"$EPNEW\"#" *Test*
在您提供属性文件时,您的引号会被错过,而sed不会被忽略。