Барретт 2012 говорит на странице 74:
"-printf
string
напечатать заданную строку, к которой могут быть применены подстановки в порядке библиотечной функции C printf()
."
и рекомендует, конечно же, справочную страницу для полного списка опций. В то время как такие вещи, как find. -printf '%s %p\n'
, объясняются, другие — нет. @jim
упомянул об использовании %T
. Я лично использую сценарий со строкой, похожей на find. -printf '%T@ %p\n'
, но никогда не могу понять, что это за %T@
. Может ли кто-нибудь сослаться на источник, объясняющий эти параметры, которых нет на страницах руководства?
Я сомневаюсь, что ваша команда sed
работает на RedHat, так как пробелы в регулярном выражении не совпадают в примере документа, который вы показываете. Кроме того, синтаксический анализ или изменение документа, написанного в структурированном формате документа, таком как XML, в лучшем случае опасны с помощью инструмента редактирования текста, ориентированного на строку -, такого как sed
.
Вторая проблема связана с использованием вами не -стандартной -i
опции. Переносимые способы редактирования места в -описаны в Q/A . Как добиться переносимости с помощью sed -i (в -редактирование места )?
Предполагая, что XML-документ правильно -сформирован, вы обычно используете XML-парсер командной строки для изменения содержимого документа.
Одним из таких синтаксических анализаторов XML командной строки является xmlstarlet
.
xmlstarlet ed -u '//config' -v 3242352353242342424 file.xml
Это установит значение всех узлов config
в строку 3242352353242342424
(, это значение будет правильно закодировано с помощью xmlstarlet
, если необходимо ). Любое предыдущее значение будет отброшено, любые атрибуты узлов config
будут сохранены.
Измененный документ будет записан в стандартный вывод, поэтому вы сможете перенаправить его в новый файл. Существует также параметр --inplace
, который следует использовать после подкоманды -ed
в командной строке.
xmlstarlet
работает как в Linux, так и в AIX.