强制 sed 忽略空格
Posted
技术标签:
【中文标题】强制 sed 忽略空格【英文标题】:Force sed to ignore white space 【发布时间】:2017-10-04 08:02:50 【问题描述】:我正在使用 sed 处理一个 XML 文件。要替换的文件内容如下。
<NS1:myService>
<NS1:code>1</NS1:code>
<NS1:timestamp>Event_Time_Stamp</NS1:timestamp>
<NS1:log>
<NS1:logLevel>some_level</NS1:logLevel>
<NS1:loggerName>log_back</NS1:loggerName>
<NS1:message>loggable_message</NS1:message>
<NS1:node>none</NS1:node>
<NS1:host>my_host</NS1:host>
</NS1:log>
</NS1:myServices>
我需要用我的文本替换节点的内容。每当包含我的文本的变量没有空间时,它都会起作用。只要有空间 sed 就会抛出错误。
sed: -e expression #1, char 120: unterminated `s' command
这是我在脚本中创建消息的方式
text="APPLICATION:\t\t$app\n"
text=$text"RECEIVER:\t\t$receiver\n"
text=$text"LOGGABLE MESSAGE:\t$message\n"
text=$text"SENDER:\t\t$sender\n"
text=$text"DATE CREATED:\t$created\n"
我使用以下 sed 语句进行替换
sed -i 's|<NS1:message>.*<|<NS1:message>'$text'<|g' $workfile
但是,上述命令每次在空间上都会中断。如何转义空格,以便 sed 像处理任何其他字符一样处理它?
【问题讨论】:
使用 XML 解析器(例如 xmlstarlet)。 如果我可以使用 XML 解析器,我会问这个问题,但我需要使用 sed。不过感谢您的尝试。 @svager 为什么需要使用 sed? 简答是我公司“标准”工具包的一部分。 请注意:他不想解析 xml。他想在一行中替换一些简单的字符串。sed
非常适合这种情况。当然,xmlstarlet 是完美的工具——但你不需要一个图钉的锤子...在一行中区分 解析 和 替换文本...
【参考方案1】:
我一发布问题就想通了。我需要你使用 "
命令如下所示
sed -i 's|<NS1:message>.*<|<NS1:message>'"$text"'<|g' $workfile
【讨论】:
以上是关于强制 sed 忽略空格的主要内容,如果未能解决你的问题,请参考以下文章