bash脚本按顺序重写数字

时间:2017-03-18 02:43:59

标签: bash sed sequence

我想重新排序'我写的一个大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编辑。

有什么想法?谢谢。

3 个答案:

答案 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修饰符允许在替换部分
  • 中使用Perl代码
  • $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 ...进行就地编辑。