2014-09-14 4 views
0

Я не эксперт по сценарию оболочки 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.

ответ

4

Поскольку команда strings печатает строки длиной не более 4 символов. --> - это длина 3, поэтому он игнорирует его. По какой причине вы обрабатываете файлы с помощью strings?

Страница человек говорит:

Для каждого файла данного, ГНУ строки выводит последовательность символов длиной не менее 4 символов (или номер, указанный с ниже вариантов) и после них следует непечатаемый символ. По умолчанию он только печатает строки из инициализированных и загруженных разделов объектных файлов; для других типов файлов он печатает строки из всего файла.

строки в основном полезны для определения содержимого нетекстовых файлов.

+0

Код был написан кем-то, у которого больше нет компании, поэтому я понятия не имею, почему они решили использовать 'strings'. Кажется, он используется для удаления всех непечатаемых символов из файла в следующем выражении: 'stringings - $ file | tr" \ n "" ">/tmp/$ file' –

+1

Если это xml, я бы не ожидал он должен иметь непечатаемые символы. Должен признаться, я не вижу в этом случае обоснования того, что он делал. Очень интересно, хочет ли он использовать «кошку» вместо «строк». Часть 'tr' имеет смысл, поскольку он заменяет все' \ n 'пробелом. Хотя мне интересно, почему он ничего не заменил. –

+0

Возможно. Файлы часто содержат французские символы и другие, которые вызывают проблемы с некоторыми нисходящими системами, например, некоторые латинские лигатуры (например, œ), en- и em-тире, фигурные кавычки и т. Д. Я думаю, идея заключалась в том, чтобы удалить все эти символы. –

Смежные вопросы