我想重新排序'我写的一个大BASH脚本中的一些变量赋值。目前,我必须手动执行此操作,而且非常耗时。 ;)
e.g:
(some code here)
ab=0
(and some here too)
ab=3
(more code here)
cd=2; ab=1
(more code here)
ab=2
我想做的是运行一个可以重新排序' ab'的分配值的命令。所以我们得到:
(some code here)
ab=0
(and some here too)
ab=1
(more code here)
cd=2; ab=2
(more code here)
ab=3
存在缩进,因为它们通常构成代码块的一部分,如“' if'或者'对于'块。
变量名称将始终相同。脚本中的第一个出现应该为零。我想如果有什么东西(比如sed)可以搜索' ab ='后跟一个整数,然后根据递增值更改该整数,这将是完美的。
希望那里的某些人知道可以做到这一点的事情。我使用凯特'我的BASH编辑。
有什么想法?谢谢。
答案 0 :(得分:2)
$ # can also use: perl -pe 's/\bab=\K\d+/$i++/ge' file
$ perl -pe 's/(\bab=)\d+/$1.$i++/ge' file
(some code here)
ab=0
(and some here too)
ab=1
(more code here)
cd=2; ab=2
(more code here)
ab=3
(\bab=)\d+
匹配ab=
和一个或多个数字。 \b
是字边界标记,因此像dab=4
这样的字词不匹配e
修饰符允许在替换部分$1.$i++
是ab=
的字符串连接和$i
的值(默认为0
)然后$i
会增加perl -i -pe
进行内部编辑答案 1 :(得分:1)
@teracoy:@try:
awk '/ab=/{sub(/ab=[0-9]+/,"ab="i++);print;next} 1' Input_file
答案 2 :(得分:1)
用于多字符RS,RT和gensub()的GNU awk:
$ awk -v RS='\\<ab=[0-9]+' '{ORS=gensub(/[0-9]+/,i++,1,RT)}1' file
(some code here)
ab=0
(and some here too)
ab=1
(more code here)
cd=2; ab=2
(more code here)
ab=3
如果需要,可以使用awk -i inplace ...
进行就地编辑。