regex - sed 中的正则表达式仅从每行中删除第一次出现
问题描述
我有以下文件要清理
cat file.txt
MNS:N+ GYPA*01 or GYPA*M
MNS:M+ GYPA*02 or GYPA*N
MNS:Mc GYPA*08 or GYP*Mc
MNS:Vw GYPA*09 or GYPA*Vw
MNS:Mg GYPA*11 or GYPA*Mg
MNS:Vr GYPA*12 or GYPA*Vr
我想要的输出是:
MNS:N+ GYPA*01 or GYPA*M
MNS:M+ GYPA*02 or GYPA*N
MNS:Mc GYPA*08 or GYP*Mc
MNS:Vw GYPA*09 or GYPA*Vw
MNS:Mg GYPA*11 or GYPA*Mg
MNS:Vr GYPA*12 or GYPA*Vr
我想删除“:”和第一次出现“或”之间的所有内容
我试过sed 's/MNS:d*?or /MNS:/g'
虽然它也删除了第二个“或”。
我尝试了https://www.geeksforgeeks.org/sed-command-in-linux-unix-with-examples/中的每个选项
无济于事。我应该创建alias sed='perl -pe'
吗?sed 似乎没有正确支持正则表达式
解决方案
perl
这里应该更合适,因为我们这里需要惰性匹配逻辑。
perl -pe 's|(:.*?or +)(.*)|:\2|' Input_file
通过使用.*?or
,我们正在检查行中的第一个最接近的匹配或字符串。
推荐阅读
- eclipse - SVN Eclipse Subversive 插件和本地存储库
- python - 在不使用任何数字的情况下,在 python 中编写代码以打印从 61 到 70 的数字
- mysql - 获取已排序行的位置
- groovy - 如何在 groovy 脚本上实现 sed 范围模式命令
- swift - How to build an array of dictionaries depending on the values of a certain model
- php - PHP/SQLSRV/json_encode。JSON 编码记录数组所需的帮助
- android - 像收音机一样的文字动画
- java - 通过更改节点将快速排序算法应用于双向链表
- php - 如何使用php将mysql插入时间转换为用户本地时间?
- python - 在没有 sudo 的 virtualenv 中安装具有二进制依赖项的 Python 库时出现问题