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:」の後に1つ以上の数字が続く行を検索します。
  • 「Release:」の後に数字と改行を続けて印刷します。数字は、入力行の2番目の単語(数字)に1を加えたものです。
于 2008-12-17T12:55:17.953 に答える
8

このperlワンライナーはawkスクリプトと同じように機能しますが、ファイルの残りの部分やリリースを含む残りの行を破壊することはありません。

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