sedが置換エントリにゼロを追加するのはなぜですか?

sedが置換エントリにゼロを追加するのはなぜですか?

この変数を「5.6.10」の値に置き換えたいと思います。

VERSION=5.4.38

現在の値を知ると、何をすべきかがわかります(5.4.38)

sed s:VERSION=5.4.38:VERSION=5.6.10:g

しかし、値がわからなくても(多くのファイルやスクリプトに役立つ)、5.6.10の内容に置き換えたいと思います。私はこれを試しました

sed s:VERSION=[0-9].[0-9].[0-90-9]:VERSION=5.6.10:g

しかし、結果は変です。

VERSION=5.6.100

10が100になった理由は何ですか?

私も試しました

sed s:VERSION=[0-9].[0-9].[0-9]:VERSION=5.6.10:g

私は同じ結果を見る。

ベストアンサー1

[0-90-9]任意の数字である可能性がある文字と一致します。あなたが意味するのは、[0-9][0-9]2つの数字が正確に一致することです。どちらの試みでも、の最後の数字は5.6.100正規表現と一致しないため、出力には変更されていません。

別の潜在的な問題は正規表現.の特殊文字です。これはすべての文字と一致します。たとえば、[0-9].[0-9].[0-9][0-9]match123.45または1a2b34.は点を一致させるために使用されます\.。特殊文字の前にバックスラッシュがある場合は、特殊文字ではありません。

また、バージョン番号の桁数は多いか少なくてもかまいません。[0-9.]*必要な数のポイントまたは数字を一致させるために使用されます。 (.括弧内にある場合は特殊文字ではありません。)より正確には、[0-9.]*点と数字の可能な最長の順序と一致するため、すべて一致します。[0-9][0-9.]*最初に1つ以上の数字を強制するには、このオプションを使用します。

sed 's:VERSION=[0-9][0-9.]*:VERSION=5.6.10:g'

おすすめ記事