Command-Line
在目錄中遞歸搜尋所有 xml 文件以查找特定標記並 grep 標記的值
Ubuntu 14.04 可信賴的塔爾。
假設我有一個名為“testmag”的目錄,其中可能包含 100 個 xml 文件和目錄,而這些目錄又包含許多 xml 文件。我不知道任何 xml 文件的名稱,但我知道其中一個包含 tag
<dbname>....</dbname>
。現在如何找到包含上述標籤的文件並將標籤的值grep作為終端中的輸出
這是一個解決方案,
find
它還將輸出包含匹配項的文件的文件名:find . -name "*.xml" -exec grep '<dbname>' {} \; \ -exec echo -e {}"\n" \; \ | sed 's/<dbname>\(.*\)<\/dbname>/\1/g'
解釋
find . -name "*.xml"
從目前目錄遞歸查找所有xml文件-exec grep '<dbname>' {} \;
在每個文件上搜尋模式<dbname>
-exec echo -e {}"\n" \;
echo 文件名 + 新行(-e
選項使 echo 解釋\n
)| sed 's/<dbname>\(.*\)<\/dbname>/\1/g'
管道輸出以僅列印標籤sed
之間包含的欄位。<dbname></dbname>
注意 1:您可以在您的輸出中格式化輸出,
echo -e ...
以使每個文件的結果清晰排列,例如通過添加新行或下劃線行來滿足您的需要。注意2:每個文件的路徑將相對於
.
(例如./subfolder1/file.xml
)給出。如果您想要絕對路徑,請選擇find $PWD -name ...
.
使用適當的 XML 解析器來解析 XML:
shopt -s globstar nullglob for file in **/*.xml; do dbname=$(xmlstarlet sel -t -v '//dbname' "$file") [[ -n "$dbname" ]] && printf "%s\t%s\n" "$file" "$dbname" done