regex - 文件字符匹配和添加字符shell脚本
问题描述
我有一个格式如下的文件
ABD|66732|987|01/06/2019 10:00|I
ABD|66732|927|01/06/2019 10:01|I
ABD|66732|W917|01/06/2019 10:02|I
ABD|66732|947|01/06/2019 10:03|I
ABD|66732|W977|01/06/2019 10:04|I
ABD|66732|997|01/06/2019 10:05|I
我想在第二个 '|' 之后加上前缀 'W' 如果 W 不存在,则在每一行上。我需要使用 bash 脚本来执行此操作。我尝试使用 sed 并且可以替换,但是如何使用 sed 有条件地替换?
解决方案
awk
更适合基于字段的处理:
$ awk 'BEGIN{FS=OFS="|"} {sub(/^[^W]/, "W&", $3)} 1' ip.txt
ABD|66732|W987|01/06/2019 10:00|I
ABD|66732|W927|01/06/2019 10:01|I
ABD|66732|W917|01/06/2019 10:02|I
ABD|66732|W947|01/06/2019 10:03|I
ABD|66732|W977|01/06/2019 10:04|I
ABD|66732|W997|01/06/2019 10:05|I
BEGIN{FS=OFS="|"}
设置|
为输入和输出字段分隔符sub(/^[^W]/, "W&", $3)
仅搜索并替换第三个字段的第一个匹配项^[^W]
仅当第三个字段的第一个字符不是时才有效W
W&
添加W
作为匹配字符的前缀
推荐阅读
- r - 有条件地用R中数据框中的字符串替换NA
- java - 在一个线程中创建数据库实体并尝试在另一个线程中检索相同的实体会给出不同的结果
- qt - 如何将定义列表加载到 QML 中?
- python - 读取 SAS 文件以获取元信息
- c# - 在 IIS 中未找到返回 404 的 MVC 控制器操作上调用 Get
- android - 注释处理器现在必须显式声明。- 黄油刀7.0.1.jar(黄油刀7.0.1.jar)
- java - 如何使用 java 10 的应用程序类数据共享功能?
- python - 在迁移文件中正确声明空的 Django PostgreSQL JSONField 默认值
- git - 如何以编程方式编辑旧的 git 提交消息?
- python - Flask-socketio - 未能设置“Access-Control-Allow-Origin”响应标头