Linux 为什么Unix;“字符串”;命令删除XML注释关闭标记?
我不是unixshell脚本编写专家,但最近我遇到了一个问题,脚本删除了XML注释块的结束标记,从而导致整个文件成为一个巨大的未关闭注释,而中间件系统读取它时立即失败。我将问题缩小到脚本中的Linux 为什么Unix;“字符串”;命令删除XML注释关闭标记?,linux,shell,unix,Linux,Shell,Unix,我不是unixshell脚本编写专家,但最近我遇到了一个问题,脚本删除了XML注释块的结束标记,从而导致整个文件成为一个巨大的未关闭注释,而中间件系统读取它时立即失败。我将问题缩小到脚本中的strings命令 例如,文件temp.xml包含以下xml: <?xml version="1.0" encoding="utf-8" ?> <!-- This is a comment --> <object>Foo</object> 请注意,只有当结束注
strings
命令
例如,文件temp.xml包含以下xml:
<?xml version="1.0" encoding="utf-8" ?>
<!--
This is a comment
-->
<object>Foo</object>
请注意,只有当结束注释标记位于其自身的一行上,而该行不包含任何其他内容时,才会观察到这种行为。所以这是一个注释-->
是单独留下的
这在我看来完全是无稽之谈。有什么原因吗
它发生在Linux2.6.18上。发行版是RHEL Server 5.10。因为
strings
命令只打印长度为4个字符或更多的字符串<代码>-->的长度为3,因此忽略它。处理带有字符串的文件的任何原因
手册页上说:
对于给定的每个文件,GNU字符串打印长度至少为4个字符的可打印字符序列(或
以下选项给出的数字)并后跟不可打印字符。默认情况下,它只打印
来自对象文件的初始化和加载部分的字符串;对于其他类型的文件,它从
整个文件
字符串主要用于确定非文本文件的内容
因为strings
命令只打印长度为4个字符或更多的字符串<代码>-->
的长度为3,因此忽略它。处理带有字符串的文件的任何原因
手册页上说:
对于给定的每个文件,GNU字符串打印长度至少为4个字符的可打印字符序列(或
以下选项给出的数字)并后跟不可打印字符。默认情况下,它只打印
来自对象文件的初始化和加载部分的字符串;对于其他类型的文件,它从
整个文件
字符串主要用于确定非文本文件的内容
代码是由某个不再在公司工作的人编写的,所以我不知道他们为什么选择使用strings
。在下面的语句中,它似乎用于从文件中删除所有不可打印的字符:strings-$file | tr“\n”“”>/tmp/$file
如果它是xml,我不希望它有不可打印的字符。我必须承认,我看不出他这样做的理由。几乎想知道他是不是想用cat
而不是字符串
。tr
部分很有意义,因为他用空格替换了所有的“\n”。虽然我想知道为什么他没有用什么来代替它。可能吧。这些文件通常包含法语字符和其他导致下游系统出现问题的字符,例如一些拉丁连字(如œ)、en和em破折号、卷曲引号、,等等。我想我的想法是删除所有这些字符。我可能会使用tr
删除不可打印的字符,比如cat$file | tr-cd'\15\40-\176'
代替strings-$file
,谢谢,我会试试看。谢谢你的回答。代码是由某个不再在公司工作的人编写的,所以我不知道他们为什么选择使用字符串。在下面的语句中,它似乎用于从文件中删除所有不可打印的字符:strings-$file | tr“\n”“”>/tmp/$file
如果它是xml,我不希望它有不可打印的字符。我必须承认,我看不出他这样做的理由。几乎想知道他是不是想用cat
而不是字符串
。tr
部分很有意义,因为他用空格替换了所有的“\n”。虽然我想知道为什么他没有用什么来代替它。可能吧。这些文件通常包含法语字符和其他导致下游系统出现问题的字符,例如一些拉丁连字(如œ)、en和em破折号、卷曲引号、,等等。我想我的想法是删除所有这些字符。我可能会使用tr
删除不可打印的字符,比如cat$file | tr-cd'\15\40-\176'
代替strings-$file
,谢谢,我会试试看。谢谢你的回答。
<?xml version="1.0" encoding="utf-8" ?>
<!--
This is a comment
<object>Foo</object>