如何用awk将唯一Key下一行的版本号数值加1?
嘿,这里有个简洁的awk命令刚好能满足你的需求,完全适配临时工作区的使用场景:
awk '/<key>UniqueKey<\/key>/{f=1;print;next} f&&/<string>/{sub(/[0-9]+/,++$2);f=0}1' your_file
命令拆解(帮你理解为啥这么写):
- 当匹配到包含
<key>UniqueKey</key>的行时:设置一个标记f=1,先把这行原样打印出来,然后用next直接跳到下一行,避免后续逻辑干扰。 - 当标记
f是1(说明上一行就是我们要找的UniqueKey行),且当前行包含<string>时:用sub函数把行里的数字替换成加1后的数值,然后把标记f重置为0,防止误改其他行。 - 最后的
1是awk的小技巧,代表“打印所有行”——除了已经手动打印过的UniqueKey行,其他行都会被正常输出。
测试示例:
原始文件内容:
<key>UniqueKey</key> <string>100</string> <key>OtherRandomKey</key> <string>500</string>执行命令后输出:
<key>UniqueKey</key> <string>101</string> <key>OtherRandomKey</key> <string>500</string>
可以看到只有UniqueKey对应的版本号被加1,其他<string>行完全不受影响,完美符合你的要求~
内容的提问来源于stack exchange,提问作者user9843902
相关产品推荐
相关产品推荐

