You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析从XML的<c>标签提取code属性的Awk命令工作原理

命令工作原理详解

我们把整条命令拆成三个阶段逐一解释:

1. 读取文件内容

cat random.xml

这一步就是把random.xml的内容输出到标准输出,作为后续命令的输入源。

2. 筛选目标行

egrep "<c.*/>"

用egrep过滤出所有自闭合的<c>标签行:

  • 正则<c.*/>的含义是:匹配以<c开头、中间包含任意字符、最后以/>结尾的行
  • 执行后会留下xml里的三行<c>标签内容,排除<a>、<b>这类无关行

3. 提取code属性值(核心步骤)

awk -F1 ' /code=/ {f=NR} f&&NR-1==f' RS='"'

这部分是关键,拆解awk的参数和脚本逻辑:

参数说明

  • RS='"':把awk的记录分隔符设为双引号。这样awk会把输入内容按双引号分割成一段段"记录",比如第一个<c>标签行会被拆成这些片段:<c id=、123、 code=、abc、 date=、12-12-2022、/>
  • -F1:这里把字段分隔符设为1,但因为已经用双引号分割了记录,每个记录本身就是独立内容,所以这个参数实际是冗余设置,没有发挥作用

脚本逻辑

awk会逐段处理每个记录:

  1. /code=/ {f=NR}:当某个记录匹配code=(也就是遇到 code=这段记录时),把当前的记录编号NR赋值给变量f
  2. f&&NR-1==f:当变量f存在(说明之前找到过code=的记录),并且当前记录的编号NR刚好比f大1时,输出当前记录
    • 因为code=的下一个记录就是我们要的属性值(比如 code=之后的abc),所以通过这个逻辑能精准提取code的内容
    • 对于没有code属性的<c>标签行,不会触发f=NR的赋值,也就不会输出任何内容

最终输出结果就是所有<c>标签里的code属性值:

abc
efg

内容的提问来源于stack exchange,提问作者pss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:20:55