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.