мне нужно сделать что-то с файлом XML на Unix. В частности, в 1 пути у меня есть разные XML-файлы. Мне нужно вырезать первые 10 цифр для значения тега tradeId, а затем вставить его для выдачи тегов

<issuer issuerIdScheme="http://www.remove-234.org">549300ADFPIVCPUAAAA</issuer>

<tradeId tradeIdScheme="http://www.remove-234.org">1234567890ABCDEFGHILMN</tradeId>

Итак, мне нужен этот результат:

<issuer issuerIdScheme="http://www.remove-234.org">1234567890</issuer>

а также

<tradeId tradeIdScheme="http://www.remove-234.org">ABCDEFGHILMN</tradeId>

Большое спасибо за помощь!

1 ответ1

0

Хотя манипулирование XML на текстовом уровне имеет свои проблемы, этого может быть достаточно: если у нас есть XML-файл

<something>
    <issuer issuerIdScheme="http://www.remove-234.org">549300ADFPIVCPUAAAA</issuer>
    <tradeId tradeIdScheme="http://www.remove-234.org">1234567890ABCDEFGHILMN</tradeId>
</somtehing>

затем пропустить это через

grep -v '<issuer issuerIdScheme' | sed 's/<tradeId tradeIdScheme="http:\/\/www.remove-234.org">\(..........\)\([^<]*\)<\/tradeId>/<issuer issuerIdScheme="http:\/\/www.remove-234.org">\1<\/issuer>\n\t<tradeId tradeIdScheme="http:\/\/www.remove-234.org">\2<\/tradeId>/'

создаст вывод

<something>
    <issuer issuerIdScheme="http://www.remove-234.org">1234567890</issuer>
    <tradeId tradeIdScheme="http://www.remove-234.org">ABCDEFGHILMN</tradeId>
</somtehing>

РЕДАКТИРОВАТЬ

Для сценария, выполняющего это со всеми файлами XML в папке, попробуйте

#!/bin/bash

FOLDER="/home/cg/root"

for X in "$FOLDER"/*.xml; do
  test -f "$X" || continue
  mv "$X" "$X.ori" || continue
  cat "$X.ori" | grep -v '<issuer issuerIdScheme' | sed 's/<tradeId tradeIdScheme="http:\/\/www.remove-234.org">\(..........\)\([^<]*\)<\/tradeId>/<issuer issuerIdScheme="http:\/\/www.remove-234.org">\1<\/issuer>\n\t<tradeId tradeIdScheme="http:\/\/www.remove-234.org">\2<\/tradeId>/' > "$X"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .