jq
довольно хорошо работает с необработанным текстом -, т.е. с флагом -R
, например.:
du -sm /var/vmail/mailboxes/domain/*/mail |
jq -R '
split(" ") |
.[0] as $size | # Remember size
.[1] | split("/") |.[-2] as $name | # Extract username
{ ($name) : ($size) } # Compose object
'
Дает вам:
{
"USER1": "80"
}
{
"USER2": "150"
}
{
"USER3": "220"
}
Чтобы объединить объекты, используйте второй jq
вызов:
... | jq -s add
Выход:
{
"USER1": "80",
"USER2": "150",
"USER3": "220"
}
Или в компактном режиме:
... | jq -sc add
Выход:
{"USER1":"80","USER2":"150","USER3":"220"}
sed -i -e s/test\///g 123.xml
просто удалить, sed -i -e s/test\//replacement/g 123.xml
заменить чем-то
Для редактирования XML следует использовать редактор XML. Он может обрабатывать изменения макета XML-схемы в файле, неожиданные комментарии и т. д. Я предпочитаюxmlstarlet
Пример файла,x.xml
<root>
<examples/>
<example path='/test/test123/test12345.txt'/>
<examples/>
</root>
Команда, которая обновляет атрибут path
в любом элементе example
до значения/test/test123
xmlstarlet ed --update '//example/@path' --value '/test/test123' x.xml
Выход
<?xml version="1.0"?>
<root>
<examples/>
<example path="/test/test123"/>
<examples/>
</root>