4

我有几个包含这一行的文件

Release: X

我想在所有文件中增加 X 。

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

sed 's/Release: '$1'/Release: '$2'/' <$file >$file.new

现在,如果文件之间的版本号不同,我该怎么办?

用 sed 可以吗?

我应该使用其他工具吗?

4

2 回答 2

13

使用awk- 它是完全正确的工具:

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

翻译:

  • 搜索包含“Release:”后跟一位或多位数字的行。
  • 打印“Release:”,后跟一个数字和一个换行符。数字是输入行中的第二个单词(数字)加 1。
于 2008-12-17T12:55:17.953 回答
8

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

 perl -pe "$_=~s/Release: (\d+)/'Release: '. ($1+1)/e;" < file > file.new
于 2008-12-17T13:51:37.153 回答