bash 编号函数

bash 编号函数

我有一个包含多个函数的 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
}

相关内容