Как заменить числа в файле XML их двойным значением?

Входной файл "input.xml":

<integer name="leftValue">30</integer>
<integer name="rightValue">580</integer>
<integer name="rightValueDefault">495</integer>

Я хочу, чтобы каждое числовое значение умножалось на 2:

<integer name="leftValue">60</integer>
<integer name="rightValue">1160</integer>
<integer name="rightValueDefault">990</integer>

Как это сделать?

1
задан 16 October 2015 в 17:23

2 ответа

В целом Вы не должны анализировать HTML / XML, использующий регулярные выражения.

Однако, если Ваш входной файл действительно похож на один показанный в примере (единственный открывающий и закрывающий тэг на каждой строке и нет > символ до конца открывающего тэга), с помощью Perl:

perl -pe 's/>([0-9]+)/">".$1*2/e' in
  • s: утверждает для выполнения замены
  • /: запускает шаблон
  • >: соответствия a > символ
  • ([0-9]+): соответствия и группы одна или несколько цифр
  • /: останавливается шаблон / запускает замещающую строку
  • ">".$1*2: выражение; конкатенация двух строк, a > символ и первая полученная группа, умноженная на 2
  • /: останавливается замещающая строка / запускает флаги шаблона
  • e: утверждает для оценки замещающей строки
% cat in
<integer name="leftValue">30</integer>
<integer name="rightValue">580</integer>
<integer name="rightValueDefault">495</integer>
% perl -pe 's/>([0-9]+)/">".$1*2/e' in
<integer name="leftValue">60</integer>
<integer name="rightValue">1160</integer>
<integer name="rightValueDefault">990</integer>
2
ответ дан 17 October 2015 в 03:23
  • 1
    Более оптимальный вариант восстановить предыдущую сессию это, чтобы использовать оконечный мультиплексор как tmux или экранировать и отсоединить сессию, заблокируйте консоль и затем повторно прикрепите к предыдущей сессии. Премия: можно выйти из системы или разъединиться полностью и все еще возобновить сессию позже. – David Foerster 6 January 2017 в 00:51

Используйте надлежащий анализатор XML. Например, в xsh, Вы можете просто написать

open input.xml ;
for //text if (. > 0) set . (2 * .) ;
save :b ;
0
ответ дан 17 October 2015 в 03:23

Другие вопросы по тегам:

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