linux - 如何删除文件中不需要的字符(使用 shell 脚本)

标签 linux shell awk sed

我有一个看起来像这样的文件 (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

我必须删除第二列中不需要的字符 ","组件",

然后预期输出

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

我执行的 shell 命令也适用于其他列(在本例中它也适用于第 3 列)这就是我遇到的问题。有没有办法只为应用命令 第二列?

谁能帮我解决这个问题?提前致谢!

注意:我不允许使用 jq 或其他脚本语言,如 JavaScript、Python 等

最佳答案

它可以在单个 sub 中完成:

awk '{sub(/"[^[:blank:]]*$/, "", $2)} 1' file | column -t

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

这里:

  • "[^[:blank:]]*$:匹配输入中以 " 开头的文本 ($2) 并替换它空字符串。
  • column -t 仅用于表格输出,如果您不需要,可以将其删除。

关于linux - 如何删除文件中不需要的字符(使用 shell 脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74202535/

相关文章:

linux - 如何将 Unix 线路终止转换为 Windows?

python - 通过 python 运行 mysqldump 时出错-访问被拒绝

c - linux终端在C程序中向上翻页和向下翻页

linux - 从 .bashrc 中键/值对的 .list 文件设置环境变量

linux - awk CR LF 处理是否在 cygwin 上中断?

c - 如何保护我的linux C程序免受盗版

windows - 将shell函数移植到cmd.exe : Is it possible to automatically source scripts on startup?

apache - 无法实例化 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

unix tr 查找和替换

bash - 如何使用 sed(或 awk)进行链接规范化,获取文件名?