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

如何用Shell脚本仅清理文件第二列的多余字符?

问题描述

我有一个file.txt文件,内容如下:

AYOnanl3knsgv2StRr44  CRITICAL","component  MMP-FileService  James.curren@wt.com  CODE_SMELL
AYOnanl3knsgv2StRr45  CRITICAL","component  MMP-FileService  James.curren@wt.com  CODE_SMELL
AYOnanl3knsgv2StRr46  CRITICAL","component  MMP-FileService  James.curren@wt.com  CODE_SMELL
AYOnanl3knsgv2StRr47  CRITICAL","component  MMP-FileService  nipun.dith@wt.com     CODE_SMELL
AYOnanmeknsgv2StRr48  MAJOR",               MMP-FileService  gbhasrajkn@vir.com  CODE_SMELL
AYOnanm-knsgv2StRr4-  BLOCKER",             MMP-FileService  nipun.dith@wt.com      CODE_SMELL
AYOnanm6knsgv2StRr49  MAJOR",               MMP-FileService  nipun.dith@wt.com      CODE_SMELL
AYOnannKknsgv2StRr4_  BLOCKER",             MMP-FileService  nipun.dith@wt.com   BUG
AYODwmuBknsgv2StRqkr  MINOR",               MMP-FileService  sam.curren@wt.com   CODE_SMELL
AYODwmuBknsgv2StRqkt  MINOR",               MMP-FileService  sam.curren@wt.com   CODE_SMELL
AYODwmuBknsgv2StRqks  MINOR",               MMP-component    sam.curren@wt.com   CODE_SMELL
AYODwmuBknsgv2StRqku  MINOR",               MMP-component    sam.curren@wt.com   CODE_SMELL
AYODsI7Fknsgv2StRqac  MAJOR",               MMP-component    sam.curren@wt.com   CODE_SMELL
AYODsI7Nknsgv2StRqad  MAJOR",               MMP-component    sam.curren@wt.com   CODE_SMELL
AYODsI-Qknsgv2StRqai  MAJOR",               MMP-component    sam.curren@wt.com   CODE_SMELL

需要移除第二列中的多余字符:","component和",,预期输出为:

AYOnanl3knsgv2StRr44  CRITICAL  MMP-FileService  James.curren@wt.com  CODE_SMELL
AYOnanl3knsgv2StRr45  CRITICAL  MMP-FileService  James.curren@wt.com  CODE_SMELL
AYOnanl3knsgv2StRr46  CRITICAL  MMP-FileService  James.curren@wt.com  CODE_SMELL
AYOnanl3knsgv2StRr47  CRITICAL  MMP-FileService  nipun.dith@wt.com    CODE_SMELL
AYOnanmeknsgv2StRr48  MAJOR     MMP-FileService  gbhasrajkn@vir.com  CODE_SMELL
AYOnanm-knsgv2StRr4-  BLOCKER   MMP-FileService  nipun.dith@wt.com    CODE_SMELL
AYOnanm6knsgv2StRr49  MAJOR     MMP-FileService  nipun.dith@wt.com    CODE_SMELL
AYOnannKknsgv2StRr4_  BLOCKER   MMP-FileService  nipun.dith@wt.com    BUG
AYODwmuBknsgv2StRqkr  MINOR     MMP-FileService  sam.curren@wt.com   CODE_SMELL
AYODwmuBknsgv2StRqkt  MINOR     MMP-FileService  sam.curren@wt.com   CODE_SMELL
AYODwmuBknsgv2StRqks  MINOR     MMP-component  sam.curren@wt.com   CODE_SMELL
AYODwmuBknsgv2StRqku  MINOR     MMP-component  sam.curren@wt.com   CODE_SMELL
AYODsI7Fknsgv2StRqac  MAJOR     MMP-component  sam.curren@wt.com   CODE_SMELL
AYODsI7Nknsgv2StRqad  MAJOR     MMP-component  sam.curren@wt.com   CODE_SMELL
AYODsI-Qknsgv2StRqai  MAJOR     MMP-component  sam.curren@wt.com   CODE_SMELL

我尝试执行命令:

cat file.txt | tr -d '",' | sed 's/component//'

但该命令会修改其他列(如第三列),导致输出异常:

YOnanl3knsgv2StRr44  CRITICAL  MMP-FileService  James.curren@wt.com  CODE_SMELL
AYOnanl3knsgv2StRr45  CRITICAL  MMP-FileService  James.curren@wt.com  CODE_SMELL
AYOnanl3knsgv2StRr46  CRITICAL  MMP-FileService  James.curren@wt.com  CODE_SMELL
AYOnanl3knsgv2StRr47  CRITICAL  MMP-FileService  nipun.dith@wt.com     CODE_SMELL
AYOnanmeknsgv2StRr48  MAJOR               MMP-FileService  gbhasran@virtusa.com  CODE_SMELL
AYOnanm-knsgv2StRr4-  BLOCKER             MMP-FileService  nipun.dith@wt.com      CODE_SMELL
AYOnanm6knsgv2StRr49  MAJOR               MMP-FileService  nipun.dith@wt.com      CODE_SMELL
AYOnannKknsgv2StRr4_  BLOCKER             MMP-FileService  nipun.dith@wt.com   BUG
AYODwmuBknsgv2StRqkr  MINOR               MMP-FileService  sam.curren@wt.com   CODE_SMELL
AYODwmuBknsgv2StRqkt  MINOR               MMP-FileService  sam.curren@wt.com   CODE_SMELL
AYODwmuBknsgv2StRqks  MINOR               MMP-    sam.curren@wt.com   CODE_SMELL
AYODwmuBknsgv2StRqku  MINOR               MMP-    sam.curren@wt.com   CODE_SMELL
AYODsI7Fknsgv2StRqac  MAJOR               MMP-    sam.curren@wt.com   CODE_SMELL
AYODsI7Nknsgv2StRqad  MAJOR               MMP-    sam.curren@wt.com   CODE_SMELL
AYODsI-Qknsgv2StRqai  MAJOR               MMP-    sam.curren@wt.com   CODE_SMELL

请问如何仅对第二列执行清理操作?注:禁止使用jq、JavaScript、Python等工具。

解决方案

可以用sed的分组匹配替换,精准定位第二列的多余字符,不影响其他列:

sed -E 's/^([^[:space:]]+[[:space:]]+)([A-Z]+)"(,"component|,)/\1\2/' file.txt

命令解释:

  • ^([^[:space:]]+[[:space:]]+):匹配并捕获第一列内容(包括后面的空格),作为第一个分组\1
  • ([A-Z]+):捕获第二列的核心状态词(CRITICAL/MAJOR/BLOCKER/MINOR),作为第二个分组\2
  • "(,"component|,):匹配第二列后面的多余部分——要么是",component,要么是",`
  • \1\2:替换为第一分组+第二分组,也就是保留前两列的核心内容,去掉多余字符

补充优化:

如果需要统一第二列后面的空格对齐,可以在替换后再加一个sed命令调整格式:

sed -E 's/^([^[:space:]]+[[:space:]]+)([A-Z]+)"(,"component|,)/\1\2/' file.txt | sed -E 's/([A-Z]+)[[:space:]]+/\1  /'

这个命令会把第二列后面的多个空格替换成两个空格,让输出和预期格式更一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:05:33