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

如何用sed正则提取文件中分号分隔的指定子串

用sed提取并格式化文本的解决方案

原始输入文本

10|subpath ; xxx ; xxx ; xxx ; xxx ; substring ; xxx ; ......
12|subpath ; xxx ; xxx ; xxx ; xxx ; substring ; xxx ; ......
18|subpath ; xxx ; xxx ; xxx ; xxx ;  ; xxx ; ......

提取需求

  • 提取每行第一个分号之前的内容
  • 提取每行第五个与第六个分号之间的子串(该子串可能为空,前后可能带空格)

输出格式要求

10|subpath;substring_fs
12|subpath;substring_fs
18|subpath;fs

规则说明

  • 如果提取的子串为空,替换为fs
  • 如果子串非空,在子串末尾追加_fs

实现的sed命令

sed -E 's/^([^;]+);.*;.*;.*;.*;\s*([^;]*)\s*;.*/\1;\2_fs/; s/;_fs/;fs/' input.txt

命令解释

  1. -E 参数启用扩展正则表达式,减少正则里的转义字符,让命令更简洁
  2. 第一个替换规则:
    • ^([^;]+):匹配并捕获第一个分号之前的所有内容(记为捕获组1)
    • ;.*;.*;.*;.*;:跳过前四个分号分隔的内容,定位到第五个分号之后
    • \s*([^;]*)\s*:匹配并捕获第五、六个分号之间的子串,同时自动去掉子串前后的空格(记为捕获组2)
    • \1;\2_fs:用捕获组1 + 分号 + 捕获组2 + _fs 替换整行内容
  3. 第二个替换规则:
    • 当捕获组2为空时,第一个替换会生成;_fs,这条规则把它替换成;fs,满足空串填充fs的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:43:11