sed を使用して数字と文字パターンを置き換えます。

sed を使用して数字と文字パターンを置き換えます。

次のファイルがあります。

some
arbitrary number of
leading
lines
a prefix followed by wmd v0.0.0-20220406135915-ce5e3ee6c6bf
some
trailing
lines

これはファイルの外観を示す例にすぎません。私が興味のある製品ラインの定数は次のとおりです。

  • いつもあり、wmd v0.0.0-その後ろに
  • 14桁の数字の後ろ
  • ハイフンの後
  • 英数字12文字

その部分をシェル変数の値で置き換えることができるsedコマンドをどのように作成できますか?20220406135915-ce5e3ee6c6bfnew_text

つまり、new_text値がある場合は、99999999999999-aaaaaaaaaaaa次の出力を生成するコマンド部分を探したいと思います<whatever goes here>sed

$ sed -e "s/wmd v0.0.0-<whatever goes here>/wmd v0.0.0-$new_text/" my-file.txt
some
arbitrary number of
leading
lines
a prefix followed by wmd v0.0.0-99999999999999-aaaaaaaaaaaa
some
trailing
lines

ベストアンサー1

\{..\}数量子を使用して、文字クラスが一致する必要がある回数を指定できます。

sed -e "s/wmd v0\.0\.0-[0-9]\{14\}-[0-9a-f]\{12\}/wmd v0.0.0-$new_text/"
#               ~  ~   ~~~~~~~~~~~~~~~~~~~~~~~~~~

また、ドットは正規表現で特別な意味を持ちます。バックスラッシュを使用すると、文字通り一致します。

また、$new_textスラッシュまたはsedに固有の他の文字を含めると、コマンドが中断される可能性があります。

おすすめ記事