Unix'teki XML dosyasındaki değeri değiştirme


0

Unix üzerinde Xml dosyası ile bir şeyler yapmam gerekiyor. Özellikle 1 yolda farklı xml dosyalarım var. Değer tradeId etiketi için ilk 10 basamağı kesmem ve sonra etiketleri basmak için yapıştırmam gerekiyor

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

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

Yani, bu sonucu almam gerekiyor:

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

ve

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

Yardım için çok teşekkürler!


İşlemek istediğiniz XML parçasını göndermeniz gerekecek, sonra size yardımcı olabilirim.
— Eugen Rieck

Yanıtlar:


0

XML'in metin düzeyinde işlenmesi kendi sorunlarına sahip olsa da, bu yeterince iyi olabilir: Bir XML dosyasına sahip olduğumuzu varsayarsak

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

sonra bunu çalıştırıp

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>/'

çıktısını yaratacak

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

DÜZENLE

Bir klasördeki tüm XML dosyalarıyla bunu yapan bir komut dosyası için deneyin

#!/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

Çok teşekkürler Eugen !! Harika iş! Son şeyler i yapabilirsiniz bir komut dosyası oluşturmak istiyorsanız:! # / Bin / bash dosyasını = "/ home / cg / kök / * xml" o zaman [ "$ dosya" -f] kodunuzu Yani fi bu şekilde yoldaki tüm dosyaları değiştirebilirim Doğru
— Massimiliano Mascoli

Bir komut dosyası için düzenlememe bakın.
— Eugen Rieck

Çok teşekkür ederim Eugen! İyi günler dilerim! Yardım için teşekkürler!
— Massimiliano Mascoli
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.