如何用sed/awk动态将逗号后的非零数字替换为布尔值1?
问题需求
需要把文本里逗号后面的非零数字(不管位数多少)全部替换成布尔值1,只有逗号后是单个0的情况不做替换。
输入示例
DA:74,0 DA:75,0 DA:79,3 < NON BOOLEAN DA:80,3 < NON BOOLEAN DA:81,3 < NON BOOLEAN DA:82,4 < NON BOOLEAN DA:83,1
之前用的命令是sed 's/,[1-999]/,1/g',但手动指定数字范围太死板,没法覆盖所有位数的非零数字。
期望输出
DA:74,0 DA:75,0 DA:79,1 DA:80,1 DA:81,1 DA:82,1 DA:83,1
额外测试用例(这些都要替换成1)
DA:108,23 DA:110,101 DA:111,098 DA:112,100
解决方案
直接用这条sed命令就能搞定:
sed 's/,\(0*[1-9][0-9]*\)/,1/g'
命令说明
正则表达式,\(0*[1-9][0-9]*\)会精准匹配逗号后面的所有非零数字场景:
- 单个非零数字(比如
,3、,1) - 任意长度的多位数(比如
,23、,101) - 开头带0的多位数(比如
,098、,100)
只要不是逗号后面只有一个0,都会被匹配替换成,1,完美符合需求。
测试验证
用额外测试用例验证:
输入:
DA:108,23 DA:110,101 DA:111,098 DA:112,100
执行命令后输出:
DA:108,1 DA:110,1 DA:111,1 DA:112,1
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

