如何用Linux的sed命令删除每行第三个'|'之前的内容?
如何用sed删除每行开头到第三个'|'的内容?
直接使用下面的sed命令即可实现需求:
sed 's/^[^|]*|[^|]*|[^|]*|//' tst.out
如果需要直接修改原文件(建议先备份后操作),可以加上-i参数:
# 适用于大部分Linux发行版的GNU sed sed -i 's/^[^|]*|[^|]*|[^|]*|//' tst.out # 适用于macOS等的BSD sed,需额外加空参数 sed -i '' 's/^[^|]*|[^|]*|[^|]*|//' tst.out
命令逻辑解释
这个替换规则的核心是精准匹配目标内容:
^定位到每行的起始位置[^|]*匹配任意数量**非|**的字符- 重复三次
[^|]*|,刚好覆盖第三个|及其之前的所有内容 - 用空字符串替换匹配到的部分,剩下的就是第三个|之后的内容
效果验证
原tst.out文件内容:
MIN AU 09/15/22 C39.5 Equit|0|75|MIN 9 C39.50|AU|BBG018NNGHR1| TIN AU 09/15/22 C39.9 ITY|0|75|RIN 9 D39.50|AU|BBG018NNGHR45| CIN AU 09/15/22 C39.8 Ref|0|75|PIN 9 F39.50|AU|BBG018NNGHR66|
执行命令后输出:
MIN 9 C39.50|AU|BBG018NNGHR1| RIN 9 D39.50|AU|BBG018NNGHR45| PIN 9 F39.50|AU|BBG018NNGHR66|
(注:你提供的预期结果中编号存在笔误,实际执行会保留原文件的正确编号)
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

