我正在使用 ArchLinux 4.1.6-1 和 bash 4.3。
我需要整理 200 多个工业机器人中的一堆程序,因此尝试将腿部工作自动化。
我可以将文件剥离为坐标引用列表,其顺序与原始文件相同,并混合bash
、sed
、head
等tail
,如下所示:
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