Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么Unix;“字符串”;命令删除XML注释关闭标记?_Linux_Shell_Unix - Fatal编程技术网

Linux 为什么Unix;“字符串”;命令删除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> 请注意,只有当结束注

我不是unixshell脚本编写专家,但最近我遇到了一个问题,脚本删除了XML注释块的结束标记,从而导致整个文件成为一个巨大的未关闭注释,而中间件系统读取它时立即失败。我将问题缩小到脚本中的
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>