GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mem-parsing XML menggunakan shellscript?

Inilah contoh kerja lengkap.
Jika hanya mengekstrak alamat email, Anda dapat melakukan sesuatu seperti:
1) Misalkan file XML spam.xml seperti

<spam>
<victims>
  <victim>
    <name>The Pope</name>
    <email>[email protected]</email>
    <is_satan>0</is_satan>
  </victim>
  <victim>
    <name>George Bush</name>
    <email>[email protected]</email>
    <is_satan>1</is_satan>
  </victim>
  <victim>
    <name>George Bush Jr</name>
    <email>[email protected]</email>
    <is_satan>0</is_satan>
  </victim>
</victims>
</spam>

2) Anda bisa mendapatkan email dan memprosesnya dengan kode bash singkat ini:

#!/bin/bash
emails=($(grep -oP '(?<=email>)[^<]+' "/my_path/spam.xml"))

for i in ${!emails[*]}
do
  echo "$i" "${emails[$i]}"
  # instead of echo use the values to send emails, etc
done

Hasil dari contoh ini adalah:

0 [email protected]
1 [email protected]
2 [email protected]

Catatan penting:
Jangan gunakan ini untuk masalah serius. Tidak apa-apa untuk bermain-main, mendapatkan hasil cepat, mempelajari grep, dll. tetapi Anda harus pasti cari, pelajari, dan gunakan parser XML untuk produksi (lihat komentar Micha di bawah).


Anda dapat mencoba xmllint

Program xmllint mem-parsing satu atau lebih file XML, ditentukan pada baris perintah sebagai file xml. Ini mencetak berbagai jenis keluaran, tergantung pada opsi yang dipilih. Berguna untuk mendeteksi kesalahan baik dalam kode XML maupun dalam parser XML-nya

Ini memungkinkan Anda memilih elemen dalam dokumen XML dengan xpath, menggunakan opsi --pattern.

Di Mac OS X (Yosemite), ini diinstal secara default.
Di Ubuntu, jika belum diinstal, Anda dapat menjalankan apt-get install libxml2-utils


Saya terkejut tidak ada yang menyebutkan xmlsh. Pernyataan misi :

Shell baris perintah untuk XML Berdasarkan filosofi dan desain Unix Shells

xmlsh menyediakan lingkungan skrip yang familiar, tetapi secara khusus disesuaikan untuk proses skrip xml.

Daftar perintah seperti shell disediakan di sini.

Saya menggunakan xed banyak perintah yang setara dengan sed untuk XML, dan mengizinkan XPath berdasarkan pencarian dan penggantian.


Ada juga xmlstarlet (yang juga tersedia untuk Windows).

http://xmlstar.sourceforge.net/doc/xmlstarlet.txt


Linux
  1. Cara men-debug program C di Linux menggunakan gdb

  2. Bagaimana Cara Ssh Ke Server Menggunakan Server Lain??

  3. Bagaimana cara melampirkan file menggunakan perintah mail di Linux?

  1. Cara Parse XML dan Strip Tag menggunakan XPATH Contoh di Linux (Cara Menggabungkan Beberapa Perintah Menggunakan PIPE di Linux)

  2. Cara Melacak Skrip Python menggunakan trace.py

  3. Bagaimana cara mengisi file dengan FF menggunakan dd?

  1. Bagaimana cara mengurai file CSV di Bash?

  2. Bagaimana cara mengurai header HTTP menggunakan Bash?

  3. Bagaimana cara default Python3.8 di Mac saya menggunakan Homebrew?