Linux下用grep命令怎么搜索XML文件内容

12次阅读

linux 下可用 grep 搜索 xml 文件,但需注意格式特点;基础搜索直接匹配关键词,跨行需用 -z 和 -P 选项,避开注释和 CDATA 应配合 -v 过滤。

Linux下用grep命令怎么搜索XML文件内容

在 Linux 下用 grep 搜索 XML 文件内容完全可行,但要注意 XML 的格式特点(如换行、缩进、属性多行写法等),否则容易漏匹配或报错。

基础搜索:直接用 grep 查关键词

XML 本质是纯文本,所以最简单的场景下,直接用 grep 就能查标签名、属性名或文本内容:

  • grep "username" user.xml —— 查含 username 的所有行
  • grep -i "status" *.xml —— 忽略大小写,批量查多个 XML 文件
  • grep -n "id=" data.xml —— 显示行号,方便定位

跨行匹配:用 -z 配合正则处理多行结构

XML 常把一个元素拆成多行(比如 n Alicen),普通 grep 默认按行匹配,会失败。这时可用 -z(将输入视为以 NULL 字符分隔的块)配合 perl 兼容正则(-P):

  • grep -zPo '[^K[^)' file.xml —— 提取 标签内的文本(需 gnu grep)
  • grep -z '.*?.*?.*?' file.xml | tr '' 'n' —— 先用 -z 匹配整个块,再换回换行显示

⚠️ 注意:-z-P 不是所有系统默认支持(如 macOS 自带 grep 不支持 -P,需装 brew install grepggrep)。

避开注释和 CDATA:加简单过滤更准确

XML 中的注释()和 CDATA 段()常含干扰文本。若只想搜实际标签内容,可先排除这些行:

  • grep -v '^ *
text=ZqhQzanResources