Я не эксперт по сценарию оболочки Unix, но у меня недавно возникла проблема с удалением закрывающего тега блока комментариев XML, что привело к тому, что весь файл был одним огромным незакрытым комментарием, который сразу же не удался в системе промежуточного программного обеспечения Это. Я сузил проблему до команды strings
в скрипте.Почему команда «strings» Unix удаляет теги комментариев XML-комментариев?
В качестве примера, файл temp.xml, содержит следующий XML:
<?xml version="1.0" encoding="utf-8" ?>
<!--
This is a comment
-->
<object>Foo</object>
Следующая команда запускается против него: strings - temp.xml
Выход есть:
<?xml version="1.0" encoding="utf-8" ?>
<!--
This is a comment
<object>Foo</object>
Обратите внимание, что это поведение наблюдается только тогда, когда тег закрывающего комментария находится на отдельной строке, которая не содержит ничего. Итак, This is a comment-->
остался один.
Это кажется совершенно бессмысленным для меня. Есть ли причина для этого?
Это происходит на Linux 2.6.18. Distro - сервер RHEL 5.10.
Код был написан кем-то, у которого больше нет компании, поэтому я понятия не имею, почему они решили использовать 'strings'. Кажется, он используется для удаления всех непечатаемых символов из файла в следующем выражении: 'stringings - $ file | tr" \ n "" ">/tmp/$ file' –
Если это xml, я бы не ожидал он должен иметь непечатаемые символы. Должен признаться, я не вижу в этом случае обоснования того, что он делал. Очень интересно, хочет ли он использовать «кошку» вместо «строк». Часть 'tr' имеет смысл, поскольку он заменяет все' \ n 'пробелом. Хотя мне интересно, почему он ничего не заменил. –
Возможно. Файлы часто содержат французские символы и другие, которые вызывают проблемы с некоторыми нисходящими системами, например, некоторые латинские лигатуры (например, œ), en- и em-тире, фигурные кавычки и т. Д. Я думаю, идея заключалась в том, чтобы удалить все эти символы. –