【问题标题】:Sed command not showing double quotesSed 命令不显示双引号
【发布时间】:2015-02-07 08:42:12
【问题描述】:

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

【问题讨论】:

  • 这就是 Bash 中引号的工作方式。 foo="bar"$foo 的值设置为 bar。如果您希望它是"bar",请使用foo="\"bar\""foo='"bar"'

标签: regex xml bash shell sed


【解决方案1】:

尝试在 sed 中使用引号:

sed -i "s#EPOLD#\"$EPNEW\"#" *Test*

当您获取属性文件时,您的引号会丢失,并且不会被 sed 忽略。

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2021-12-20
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多