bash - Bash:根据匹配的子字符串替换一列中的整个字符串
问题描述
我有一个包含许多列和行的大文件。我想根据我要替换的所有字符串共有的子字符串替换第一列中的整个字符串。这是我所拥有的一个例子:
AAA_1765 866 HTG
AAA_1873 987 IGA
AAA_1922 413 BOK
我希望第一列中包含子字符串 AAA_1 的所有字符串都完全替换为另一个字符串,使其看起来像这样:
BBB_2 866 HTG
BBB_2 987 IGA
BBB_2 413 BOK
我一直在使用 sed 进行搜索/替换:
sed 's/^AAA_1*/BBB_2/' infile.txt >outfile.txt
sed 's/^AAA_1.*/BBB_2/' infile.txt >outfile.txt
但是第一次使用仅将子字符串 AAA_1 替换为 BBB_2 并保留字符串的其余部分(我希望将整个字符串替换为 BBB_2),第二次使用将整行替换为 BBB_2(我只想要第一列中的字符串替换)。
也许 awk 是我需要的?任何建议都会有所帮助。
解决方案
AAA_1
使用后您可以匹配任何 0+ 位
sed 's/^AAA_1[0-9]*/BBB_2/' infile.txt > outfile.txt
请参阅在线sed
演示。
这个正则表达式匹配
^
- 行首 -AAA_1
- 文字子串[0-9]*
- 零个或多个数字(如果表示任何非空格,您可以将其替换为[^ ]*
)
推荐阅读
- jquery - Laravel - 如何切换复选框并更新数据库中的字段
- git - git sparse-checkout 从根 repo 中的子模块
- typescript - Vue Property Decorator 上的感叹号代表什么
- java - 创建类的泛型类型数组
- python - Python - 以合理的格式放置列表
- ios - 迁移到 firebase v6 后未找到 RNFirebaseNotifications.h。反应原生
- android - 如何使用适用于 Android iOS 和 Web 的 expo SDK 36 创建 dev/staging/preprod/prod 和默认环境?
- swiftui - 在具有 UIViewRepresentable 大小问题的 SwiftUI 中使用 Material MDCCard
- java - 如何修复 java.io.IOException:无法通过代理隧道。代理返回“HTTP/1.1 400 错误请求”?
- mysql - 制作 Discord 验证系统