Sed命令没有显示双引号

时间:2014-12-09 12:42:39

标签: regex xml bash shell sed

我正在使用“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>

2 个答案:

答案 0 :(得分:2)

通过插入文字双引号来分配您的变量:

EPNEW='"jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=queue format="pox" "'

你的任务是:

EPNEW="jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=queue format="pox" "

这会将此值保留在EPNEW

jms:/Queue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=queue format=pox

答案 1 :(得分:1)

尝试使用sed:

中的引号
sed -i "s#EPOLD#\"$EPNEW\"#" *Test*

在您提供属性文件时,您的引号会被错过,而sed不会被忽略。