如何使用sed命令定位指定行列替换未知数值?
使用sed修改指定行指定列的数值
针对你的需求,我们可以利用sed的正则匹配和捕获组功能,精准定位到第2行第21列开始的数值并替换为32,不管原数值是几位。
适用BSD sed的命令(如macOS默认sed)
sed -i '' -E '2s/^(.{20})[0-9]+/\132/' example.txt
适用GNU sed的命令(如Linux默认sed)
sed -i '2s/^(.{20})[0-9]\+/\132/' example.txt
命令解释:
2:限定仅对第2行执行替换操作^(.{20}):匹配行首开始的前20个字符,用括号捕获这部分内容,后续通过\1引用[0-9]+(GNU sed中也可写[0-9]\+):匹配第21列开始的一个或多个连续数字,覆盖任意位数的原数值\132:将捕获的前20个字符与目标数值32拼接,替换掉原来的匹配内容
效果验证:
原文件第2行如果是this is my number = 131;,执行命令后会变为this is my number = 32;;如果原数值是30或130,替换后同样会得到this is my number = 32;。
内容的提问来源于stack exchange,提问作者Harun Sasmaz
相关产品推荐
相关产品推荐

