如何在Bash中删除每行.V之前的内容且保留_V后缀不变
正确文本处理命令实现方案
问题原因
你之前使用的命令出错有两个核心原因:
- 正则中没有匹配
.V里的字面量.,.在正则中默认代表匹配任意字符 ^.*V的贪婪匹配规则会匹配到行末尾最后一个出现的大写V,导致后续内容被误删
正确实现命令
Linux 环境(GNU Sed)
直接执行以下命令即可原地修改文件:
sed -i 's/^.*\.V/V/' file.txt
macOS 环境(BSD Sed)
需要为-i参数指定备份后缀,不需要备份的话传入空字符串:
# 不保留原文件备份 sed -i '' 's/^.*\.V/V/' file.txt # 保留原文件备份为file.txt.bak sed -i '.bak' 's/^.*\.V/V/' file.txt
正则说明
^匹配行开头.*\.V匹配任意数量的任意字符,直到遇到.V这个固定组合(\.是转义后的字面量点,确保不会匹配其他位置的大写V)- 替换为
V相当于删除了.V之前的所有内容和分隔符点,完整保留V以及后面的所有内容,包括末尾的_V完全不受影响
处理结果示例
使用你提供的输入文件执行后,输出结果为:
V1204_V V1405_F V12_V V18_Z V3049_G V674_T V901_V V7_X
内容的提问来源于stack exchange,提问作者Luker354
相关产品推荐
相关产品推荐

