如何将尾随数字更改为递增数字

如何将尾随数字更改为递增数字

我正在使用 ArchLinux 4.1.6-1 和 bash 4.3。

我需要整理 200 多个工业机器人中的一堆程序,因此尝试将腿部工作自动化。

我可以将文件剥离为坐标引用列表,其顺序与原始文件相同,并混合bashsedheadtail,如下所示:

via15
via25
via35
via3
via4
via5
p0584_62284
via43

via我需要将包含从 1 开始的递增数字系列的行上的尾随数字更改为:

via1
via2
via3
via4
via5
via6
p0584_62284
via7

我是一名机器人程序员,我只能管理简单的sed正则表达式,但是有了awk,我就像自行车上的鱼。

答案1

$ awk '/via/{$0="via" ++n};1' file
via1
via2
via3
via4
via5
via6
p0584_62284
via7

怎么运行的

  • /via/{$0="via" ++n}

    如果该行包含via,则将其替换为“via”,后跟n。每次执行此操作之前, 前导++原因都会增加。 awk 是如何引用整个行的。n$0

  • 1

    这是 awk 打印该行的神秘简写。

    详细来说,1是一个条件,它的计算结果为 true。由于未指定任何操作,因此将执行默认操作,即打印行:print $0。因此,lone1是打印该行的简写。

更具选择性的方法

这三个字母有可能via出现在我们所做的行上吗不是想改变吗?如果是这样,我们应该更有选择性地改变哪些线路。如果我们只想更改以 和 开头via且后面via仅跟数字的行,那么,正如 NeronLeVelu 在评论中建议的那样,我们应该使用更具限制性的正则表达式,例如^via[0-9]+$.在这种情况下:

awk '/^via[0-9]+$/{$0="via" ++n};1' file

相关内容