как искать и заменять элемент PATH на SED файла xml в bash

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"}
1
21.09.2020, 18:27
2 ответа

sed -i -e s/test\///g 123.xml просто удалить, sed -i -e s/test\//replacement/g 123.xmlзаменить чем-то

0
18.03.2021, 23:04

Для редактирования 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>
2
18.03.2021, 23:04

Теги

Похожие вопросы