Linux
查找包含特定標籤名稱的 xml 文件並列印標籤名稱之間的單詞
我們可以找到以下xml文件類型
find /tmp/ -type f -name '*.xml'
但是如何更改語法以僅查找包含以下內容的xml:
<Name>some words</Name>
並列印之間的內容:
<Name> ------ </Name>
預期產出
some words
範例 - xml 文件包含:
<Name>files_with_extra_data</Name>
預期產出
files_with_extra_data
一個簡單的解決方案是使用 sed:
find /tmp -name '*.xml' -exec sed -n 's/<Name>\([^<]*\)<\/Name>/\1/p' {} +
正則表達式匹配標籤並列印介於兩者之間的內容。如果我們刪除轉義字元更容易閱讀:
s / <Name>([^<]*)</Name> / \1
括號匹配任何不是“<”的字元並映射到\1
正如評論中提到的,這將是一個簡單的解決方案,正則表達式無法處理結構化文本的所有可能變化。因此,如果標籤或其他標籤之間有多行,它將無法正常工作,您將需要使用真正的 xml 解析器