Bash: Xml Parser
Open Source projelere destek olmak amacıyla en kısa süreçte bitmesi ümidiyle:
https://github.com/ShyRain/XmlParser
Bash XML Parser’ın ilk Prototipi (28.1.2013)
Download BashXmlParser (bxp 32)
(32 Bit Ubuntu için Compile Edilmiştir..)
(Bash Shell’de kullanım için oluşturulmuştur.)
~# file bxp bxp: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x62ec2299a522efdead33ace8f2492ff89980fea1, stripped
Download BashXmlParser (bxp 64)
(64 Bit Ubuntu için Compile Edilmiştir..)
(Bash Shell’de kullanım için oluşturulmuştur.)
~# file /usr/sbin/bxp /usr/sbin/bxp: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x8478ffe0178b9fc4ae60c92318eefefac9f0c797, stripped
Yükleme
indirdiğiniz bxp binary dosyasını /usr/sbin altına kopyalayıp çalıştırılabilir izni verin.
~# sudo su ~# cp bxp /usr/sbin/ ~# chmod +x /usr/sbin/bxp
artık komut satırında istediğiniz yerde bxp komutunu kullanabilirsiniz.
Kullanım:
V1 ‘deki özellikleri oldukça kısıtlıdır:
~# bxp dene.xml -tc 'from' 1 ~# <from>Jani</from> ~# bxp dene.xml -tcw 'from' 1 ~# Jani
bxp komutundan sonra dosya adını yazıyoruz, aynı klasör de değilse tam dosya yolunu yazmayı unutmayın.
Sonra -tc yada -tcw parametreleri ile “tag content” yada “tag content without” kısaltmalarıyla tagların içeriğini çekiyoruz.
-tc kullanılırsa yanlarındaki taglarıda birlikte gelir
-tcw kullanılırsa tagsız saf hali gelir.
Sonra kullanmak istediğiniz parametreyi yazın ben dene.xml içerisindeki from tag’ını aldım.
Son olarak sondaki 1’de from tag’ını kullanan childe ‘den fazla olduğu için ben ilk tag’ın arasındaki content’e ulaştım..
Download dene.xml (örnek dosya)
Lütfen Öneri ve Yorumlarını Ekleyerek Gelişmesine Katkıda Bulunun…
EK: 08.05.2013
Bir takım farklı bilgisayarlarda denedikten sonra her zaman çalışmadığını görerek Bash Script Olarak Source kodunu vermeye karar verdim.
Ancak source code’da her işletim sisteminde aynı tepkiyi vermemektedir.
Örneğin Centos ve Ubuntu farklı sonuçlar vermektedir. En azından sizin için bir başlangıç olabilir.
#!/bin/bash XMLFILE=$1 TMP="/tmp/xml.txt" TMP1="/tmp/xml1.txt" TMP2="/tmp/xml2.txt" TMP3="/tmp/xml3.txt" TREE="/tmp/tree.txt" ## remove all txt rm -rf ${TMP} ${TMP2} ${TMP3} ${TREE} ##tek satıra indirgedik cat ${XMLFILE} | tr -d '\n' > ${TMP} ##xml header'ını sil dummy=`cat ${TMP} | grep '\|?>' | head -1` if [ -n "${dummy}" ] then vContent=`cat ${TMP} | sed -n 's/.*\(.*?>\).*/\1/p'` cat ${TMP} | sed "s,$vContent,,g" > ${TMP2} fi ##xml yorumlarını sil dummy=`cat ${TMP2} | grep '' | head -1` if [ -n "${dummy}" ] then cat ${TMP2} | grep -Po '' > ${TMP3} while read item do cat ${TMP2} | sed "s,$item,,g" > ${TMP} mv ${TMP} ${TMP2} done < ${TMP3} fi ##Tagları çıkartalım sTag=`cat ${TMP2} | grep -Po '<.*?>' | grep -v '' | wc -l` fTag=`cat ${TMP2} | grep -Po '' | wc -l` if [ "${sTag}" != "${fTag}" ] then echo 'Bozuk XML Dosyası' exit 1; fi cat ${TMP2} | grep -Po '<.*?>' > ${TMP} ##cat ${TMP} all tag no=0 while read tag do x=`echo ${tag} | grep ''` if [ -z "$x" ] then let no=$((no+1)) echo ${tag}"##"${no} >> ${TREE} else echo ${tag}"##"${no} >> ${TREE} let no=$((no-1)) fi done < ${TMP} ###### Parametreye Göre Cevap hazırlanacak if [ $# -lt 2 ] then echo "Usage : bxp name.xml -r -p -2" exit fi #count=2 #while [[ $count -le $# ]] #do # echo "$count" # (( count++ )) #done ############### case "$2" in -tc) TAG=$3 TAGNO=$4 no=`cat ${TMP} | grep "${TAG}" | wc -l` if [ $no -eq 2 ] then cat ${TMP2} | grep -Po "<${TAG}.*?>.*?${TAG}>" else cat ${TMP2} | grep -Po "<${TAG}.*?>.*?${TAG}>" > ${TMP1} cat "${TMP1}" | head -${TAGNO} | tail -1 fi ;; -tcw) TAG=$3 TAGNO=$4 no=`cat ${TMP} | grep "${TAG}" | wc -l` if [ $no -eq 2 ] then cat ${TMP2} | grep -Po "<${TAG}.*?>.*?${TAG}>" | sed 's,.*>\(.*\)<.*,\1,g' else cat ${TMP2} | grep -Po "<${TAG}.*?>.*?${TAG}>" > ${TMP1} cat "${TMP1}" | head -${TAGNO} | tail -1 | sed 's,.*>\(.*\)<.*,\1,g' fi ;; *) echo "Author : Emre Çamalan" ;; esac ########################################## ## remove all txt rm -rf ${TMP} ${TMP2} ${TMP3} ${TREE}
CCNA: Ağlar Arası İletişimin Temelleri FreeBSD: ZFS diski GELI ile şifreleme