如何用sed去除字母后数字的前导零(非字符串开头零)
使用sed去除字母后数字的前导零
直接用下面的sed命令就能实现需求:
sed 's/\([A-Z]\)0*\([1-9][0-9]*\)/\1\2/'
命令解释
\([A-Z]\):捕获开头的单个大写字母,这个分组会被保存为\1,替换时直接引用就能保留原字母。0*\([1-9][0-9]*\):匹配字母后紧跟的所有前导零(0*表示0个或多个零),然后捕获从第一个非零数字开始的完整数字部分([1-9][0-9]*确保不会把全零的情况误处理),这个部分保存为\2。- 替换动作
\1\2:把捕获的字母和去前导零后的数字拼接,得到目标结果。
验证示例
输入:
A10 A01 A1 B09 B80 C11
执行命令后输出:
A10 A1 A1 B9 B80 C11
针对你遇到的困惑补充
^[0]不适用是因为你的场景里前导零不在字符串开头,而是在字母之后,所以开头锚定^没用。- 之前尝试
[A-Z][0]只匹配了单个字母加单个零,而且没有用分组捕获来保留字母,用\([A-Z]\)把字母单独捕获后,替换时就能直接复用,不用重新写死字母,适配所有大写字母开头的情况。
内容的提问来源于stack exchange,提问作者nd34567s32e
相关产品推荐
相关产品推荐

