Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用sed或perl递增和查找/替换数字_Bash_Ubuntu - Fatal编程技术网

Bash 如何使用sed或perl递增和查找/替换数字

Bash 如何使用sed或perl递增和查找/替换数字,bash,ubuntu,Bash,Ubuntu,我有一个名为a_tag-30的git标记,我希望找到最后一个标记,并使用sed或perl表达式将其递增1,因此结果将是一个_tag-31。有人能帮我解决这个问题吗?在bash中使用多种实用程序组合是最简单的。例如: echo "a_tag-$(($(git tag --list 'a_tag-*' | sed -e 's/^.*-\([0-9]*\)/\1/' | sort -nr | head -1) + 1))" > output 这将把新标记写入输出

我有一个名为a_tag-30的git标记,我希望找到最后一个标记,并使用sed或perl表达式将其递增1,因此结果将是一个_tag-31。有人能帮我解决这个问题吗?

在bash中使用多种实用程序组合是最简单的。例如:

echo "a_tag-$(($(git tag --list 'a_tag-*' 
    | sed -e 's/^.*-\([0-9]*\)/\1/'  
    | sort -nr
    | head -1) + 1))" > output
这将把新标记写入输出


除了有前缀a_标记外,它还假设所有标记都以一个破折号结尾,后跟一个数字。

遵循git命令将获取所有与模式a_标记匹配的标记-*并通过-taggerdate键按降序排序

git tag-list'a_tag-*'-sort=-taggerdate | head-1 | awk-F-'{print a_tag-$NF+1}'

然后,第一行被馈送到awk命令,其中-用作字段分隔符。 因此,$NF位置参数,即NF表示字段数,它是awk中的预定义变量,保存最后一个字段的值


最后,通过将$NF增加1来打印新的标记值。

如果输入中没有标记值,那么如何打印?我有一个标签列表,最后一个标签的编号是30,我想用1增加它。所以它将是tag-31。我修改了命令,使用git命令生成标记列表。没问题。除了接受答案外,你还可以投票选出任何和所有有帮助的答案。如果答案是39,会发生什么?