[英]Extract text from XML tags using sed - shell script
好吧,我已經編寫了基本上將 xml 文件作為輸入並提取特定 XML 標簽的文本的腳本,它正在工作。 但是獲取多行文本並允許特殊字符還不夠聰明。 文本格式應保持完整,因為它是在標簽下定義的,這一點非常重要。
下面是 XML 輸入:
<nick>Deminem</nick>
<company>XYZ Solutions</company>
<description>
/**
*
* «Lorem» ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
* tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
* At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
* no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit
* consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
* magna aliquyam erat, sed diam voluptua.
*
**/
</description>
上面的腳本提取每個特定標簽的文本並分配給新的 valueArray。 我對 sed 的命令是基本的,但總是願意 go 加倍努力。
tagsArray=( nick company description )
noOfElements=${#tagsArray[@]}
for (( i=0;i<$noOfElements;i++)); do
OUT=`grep ${tagsArray[${i}]} filename.xml | tr -d '\t' | sed -e 's/^<.*>\([^<].*\)<.*>$/\1/' `
valueArray[${i}]=${OUT}
done
正如您所經歷的那樣,使用正則表達式解析 XML 最終會導致麻煩。 花時間學習足夠的XSL (有很多教程)來正確轉換 XML,例如使用xsltproc 。
編輯:
在嘗試了幾個命令行 xml 實用程序之后,我認為xmlstarlet可能是適合您的工具。 以下內容未經測試,並假設filename.xml
是正確的 xml 文件(即具有單個根元素)。
tagsArray=( nick company description )
noOfElements=${#tagsArray[@]}
for (( i=0;i<$noOfElements;i++)); do
valueArray[${i}] = `xmlstarlet sel -t -v "/root/$tagsArray[i]" filename.xml`
done
#!/bin/sh
filePath=$1 #XML file path
tagName=$2 #Tag name to fetch values
awk '!/<.*>/' RS="<"$tagName">|</"$tagName">" $filePath
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.