sedを使用してファイルのバージョン番号を変更する

sedを使用してファイルのバージョン番号を変更する

ファイルのバージョン番号を更新する必要があります。ファイルには、次のようにセマンティックバージョン番号を含む行があります。

foo.bar.blah.blub#10.6.1

それでは、「blah.blub」プレフィックスを見つけて正しい行を識別し、バージョン番号を変更したいと思います。

私が得た以下は明らかに動作しません。

sed -i -e 's/^blah.blub#\d\.\d\.\d$/blah.blub'${VERSION}/$ README.MD

答え1

Sedはデフォルトでデフォルトの正規表現を使用しますが、ほとんどの実装(使用中のように見えるGNU実装を含む)はそれを理解していません\d。また、あなたの行はで始まらないので一致しないという意味ですblah.blub^そして他の様々な問題。

これにより、必要な操作が実行されます。

sed -i -E "/blah\.blub#/s/#.*/#$VERSION/" README.MD

これにより、aの後のテキストが#の内容に置き換えられます$VERSION。ただし、その行にが含まれている場合にのみ適用されますblah.blub。これで1行しか表示されていないので、これがあなたのデータに十分具体的かどうかわかりません。

答え2

-iそして特徴\dですperl。一部のsed実装では、これらの機能の1つまたは両方(ast-openなど)が追加されていますが、いずれにしても、両方の機能はコマンドの標準仕様に含まれず、移植sed可能ではありません。

ここでは実際を使用することもできます。

export VERSION
perl -pi -e 's/^([\w.]*\.)?blah\.blub#\K\d+\.\d+\.\d+$/$ENV{VERSION}/' README.MD

これには0個以上のオプションのシーケンスが許可されています。言葉文字またはドット、前のドットで終わり、blah.bluh元のバージョン番号の3つのコンポーネントのそれぞれに2つ以上の数字が許可されます。

また、コード式ではなく環境変数を介して新しいバージョン文字列を渡すので、より安全で(任意のコード挿入の脆弱性を防止します)、より安定しています(新しいバージョンのテキストにすべての文字またはバイト値を許可する)。

関連情報