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

使用sed/awk/cut修改文本中以>开头的行,提取|分隔的指定字段

解决方案

方案1:sed 单命令实现(优先推荐,兼容性好、效率极高)

GNU sed(Linux系统默认自带)直接执行以下命令即可原地修改文件:

sed -i '/^>/ s/^>[^|]*|\([^|]*\)|.*/>\1/' 目标文件.txt

如果你需要自动备份原文件,避免操作失误,可以加备份后缀:

# 执行后会自动生成 目标文件.txt.bak 备份
sed -i.bak '/^>/ s/^>[^|]*|\([^|]*\)|.*/>\1/' 目标文件.txt

如果是macOS系统自带的sed,命令需要调整为:

sed -i '' '/^>/ s/^>[^|]*|\([^|]*\)|.*/>\1/' 目标文件.txt

命令逻辑说明:

  • /^>/ 仅匹配以>开头的待修改行,其他行原样保留
  • 替换规则:匹配开头>+第一个|之前的所有内容 + 第一个| + 捕获两个|之间的内容 + 后续所有内容,最终替换为>加捕获到的需要保留的字段
  • 单遍扫描文件,无额外进程开销,百万行大文件处理效率极高

方案2:awk 实现

如果你更习惯用awk,gawk 4.1及以上版本支持原地编辑,执行以下命令即可:

awk -i inplace 'BEGIN{FS="|"} /^>/{print ">" $2; next} {print}' 目标文件.txt

命令逻辑说明:

  • 以|作为字段分隔符
  • 匹配到>开头的行时,直接输出>加第二个字段,跳过后续逻辑
  • 其他行原样输出
  • 同样为单遍扫描,处理大文件效率极高

补充说明

你之前单独用cut的方案已经很接近需求,只是cut无法针对特定行前缀做特殊处理,配合sed/awk的行匹配能力就可以完美满足要求,不需要多命令管道组合,避免额外IO开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 22:15:08