Linux

查找包含特定標籤名稱的 xml 文件並列印標籤名稱之間的單詞

  • July 9, 2020

我們可以找到以下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 解析器

引用自:https://unix.stackexchange.com/questions/417715