簡體   English   中英

使用Shell腳本查找在某些條件下xml中存在的多個屬性

[英]Finding multiple attributes present in an xml with certain conditions using shell scripting

grep -R --include="*.xml" "Frontal Face" /home/ashutosh/Desktop/imgdone | grep -v "Non Frontal Face"

該命令為我提供了存在“正面”的所有xml。 如果我想通過此Shell腳本搜索更多屬性,例如“ Happy”,“ Young”(出現在xml中),我應該對此做哪些更改?

綜上所述,如何搜索多個屬性?

正如您對上一個問題的答案和注釋中已經指出的那樣,這里沒有任何內容支持專門搜索XML屬性。 正如已經多次指出的那樣, grep並不是搜索結構化格式的好工具。

如果您的問題只是“如何在文件的任何位置找到X,Y或Z”,那么這很簡單; grep -E 'X|Y|Z' files 但這並不能排除不屬於XML屬性的匹配項,也不能找到由於某種原因而被XML功能遮蓋的匹配項(例如X也可以有效地表示為X或此類型的許多變體)。 再一次,這之前已經向您指出過。

雖然可以將XPath表達式寫為“在解析的元素樹中使用屬性值為'baz'或'quux'查找任何元素”,但這並不是真正的明智要求。 通常,您希望使用類似“在樹中找到bar屬性為'baz'或'quux'的任何foo元素,即匹配正則表達式^(baz|quux)$內容,例如

//foo/@bar[matches(.,'^(baz|quux)$')]

matches()謂詞是XPath 2.0的功能。

你會用它像

find /home/ashutosh/Desktop/imgdone -type f -name '*.xml' -exec \
    xmllint --xpath '//foo/@bar[matches(., "^(baz|quux)$")]' {} \;

如果你的shell是夠新,可以刪除find命令,並且只使用遞歸通配符像/home/ashutosh/Desktop/imgdone/**/*.xml作為文件名參數xmllint

如果您沒有xmllint ,請尋找xmlstarlet或其他任何XPath工具; 目前還沒有一個普遍存在的標准實用程序。

正如Tripleee指出的那樣,如果您需要在xml結構中搜索諸如屬性或值之類的特定元素,則可以使用xsltprocxmllint

如果您只需要在同一句子中添加一些“給X或Y的行”,則可以執行以下操作:

grep -E 'X|Y' file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM