Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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 如果数字不总是相同的,如何在多个文件中增加一个数字?_Bash_Search_Scripting_Replace_Sed - Fatal编程技术网

Bash 如果数字不总是相同的,如何在多个文件中增加一个数字?

Bash 如果数字不总是相同的,如何在多个文件中增加一个数字?,bash,search,scripting,replace,sed,Bash,Search,Scripting,Replace,Sed,我有几个文件包含这一行 Release: X 我想在所有文件中增加X 如果文件之间的X是常数,我可以让一个bash脚本在文件周围循环并执行($1包含以前的版本号,$2包含新版本号,即$1+1): sed的/Release:'$1'/Release:'$2'/'$file.new 现在,如果文件之间的版本号不同,我该怎么办 使用sed是否可行 我应该使用另一个工具吗?使用awk-它正是用于此目的的合适工具: awk '/Release: [0-9]+/ { printf "Release: %

我有几个文件包含这一行

Release: X
我想在所有文件中增加X

如果文件之间的X是常数,我可以让一个bash脚本在文件周围循环并执行($1包含以前的版本号,$2包含新版本号,即$1+1):

sed的/Release:'$1'/Release:'$2'/'$file.new
现在,如果文件之间的版本号不同,我该怎么办

使用sed是否可行


我应该使用另一个工具吗?

使用
awk
-它正是用于此目的的合适工具:

awk '/Release: [0-9]+/ { printf "Release: %d\n", $2+1 }' < $file > $file.new
awk'/Release:[0-9]+/{printf“Release:%d\n”,$2+1}'<$file>$file.new
翻译:

  • 搜索包含“Release:”后跟一个或多个数字的行
  • 打印“Release:”后接数字和换行符。数字是输入行中的第二个字(数字)加1

此perl one liner将执行与awk脚本相同的操作,但不会破坏文件的其余部分或包含发行版的其余行

 perl -pe "$_=~s/Release: (\d+)/'Release: '. ($1+1)/e;" < file > file.new
perl-pe“$=~s/Release:(\d+)/“Release:”($1+1)/e;“file.new

非常感谢,这正是我想要的。我现在将寻找一个关于awk的教程,并了解更多关于它的信息。您还需要确保定义一个文件作为该版本的主“源”。因此,所有其他文件都应该从该单一来源获取其版本。使用{print$0}打印除“Release line”之外的那些行。应该很简单。请参考手册了解确切的语法。记录如下,但我确信有更好的方法:awk'/Release:/{printf“Release:%d\n',$2+1}/Release://{print}'<$file>$file.new您的最终结果仍将在发布编号后的一行中丢弃内容(例如,“Release 2:这些不是您要寻找的机器人”将变为“Release 3”)。当然,这对你的处境来说可能不是问题。
 perl -pe "$_=~s/Release: (\d+)/'Release: '. ($1+1)/e;" < file > file.new