我有一个包含多个函数的 bash 脚本。函数具体如下:
func1()
{
command
}
func2()
{
command
}
我的问题是:如果我想删除func76()
。编号函数的顺序被破坏了。我该如何更改所有函数名称的编号部分以使其重新按顺序排列?例如,以前的func77()
现在将变成func76()
等等,直到最后。有什么想法吗?
答案1
重命名任务可以很容易地完成awk
:
awk -v"a=1" '/func[0-9]+()/{$0="func"a"()";a+=1}1'
func[0-9]+()
这将用递增的数字替换与函数名称匹配的每一行,并打印每一行。
解释
-v"a=1"
a=1
–在程序开始执行之前设置-/pattern/{action}
– 对于与正则表达式匹配的行pattern
,执行action
/func[0-9]+()/
– 匹配包含“func”后跟一个或多个数字([0-9]+
)和“()”的每一行$0="func"a"()"
– 将当前处理的行($0
)设置为“func”,后跟变量的内容a
和“()”a+=1
– 增加a
一1
– 打印当前行的快捷方式 – 事实上,它是另一个带有表达式和动作的语句,只是表达式很简单1
(= 每行都为真),动作是默认动作,即print
。您可以{print}
根据需要将其替换为。
示例运行
$ <functions.bash cat
func1()
{
command1
}
func3()
{
command3
}
$ <functions.bash awk -v"a=1" '/func[0-9]+()/{$0="func"a"()";a+=1}1'
func1()
{
command1
}
func2()
{
command3
}