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

如何用awk或sed提取文本中特定位置的sequence counter?

用awk/sed提取序列计数器的解决方案

方法一:使用awk

如果你的输入文件是input.txt,执行以下命令即可将提取到的计数器输出到output.txt:

awk '/8100/ { pos = index($0, "8100") + 4 + 48; print substr($0, pos, 2) }' input.txt > output.txt

命令解释:

  • /8100/:只处理包含8100标记的行
  • index($0, "8100"):定位8100在当前行的起始位置
  • +4:跳过8100本身的4个字符
  • +48:往后偏移48个字符,找到序列计数器的起始位置
  • substr($0, pos, 2):从目标位置截取2个字符(即序列计数器)并打印

方法二:使用sed

同样针对input.txt,执行以下命令:

sed -n 's/.*8100.\{48\}\(..\).*/\1/p' input.txt > output.txt

命令解释:

  • -n:关闭默认输出所有行的功能,只打印我们需要的内容
  • s/.*8100.\{48\}\(..\).*/\1/p:
    • .*8100:匹配8100之前的所有字符
    • .\{48\}:匹配8100之后的48个任意字符
    • \(..\):捕获接下来的2个字符(目标计数器)
    • \1:将整行替换为捕获到的这2个字符
    • p:打印替换后的结果

注意事项

如果你的标记是完整的<strong>8100</strong>而非单纯的8100,需要调整命令:

  • awk命令调整:

    awk '/<strong>8100<\/strong>/ { pos = index($0, "<strong>8100<\/strong>") + 19 + 48; print substr($0, pos, 2) }' input.txt > output.txt
    

    这里+19是因为<strong>8100</strong>的总长度为19,用于跳过整个标记字符串。

  • sed命令调整:

    sed -n 's/.*<strong>8100<\/strong>.\{48\}\(..\).*/\1/p' input.txt > output.txt
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:15:17