sed または perl を使用してドットを文字に置き換えます。

sed または perl を使用してドットを文字に置き換えます。

このようなファイルがあります。

KN1234.1
KN2345.1
KN1233.1

出力を得るために.をvに置き換えたいと思います。

KN1234v1
KN2345v1
KN1233v1

後。常に1ですが、KNの後には最大5桁を持つことができます。このようなことも可能ですKN14345.1。出力は次のようになります。KN14345v1

sedコマンドを試しました

sed 's/KN\d+.1/KN\d+v1/g' file.txt

しかし、何も起こりませんでした。この問題をどのように解決できますか?

Perlソリューションも高く評価されています。

ありがとう

答え1

これ:

sed 's/KN\d+.1/KN\d+v1/g' file.txt

あなたのsedがそれをサポートする可能性が低いので、何もしないので\d(私の考えではPerlから来たようです)、パターンはどんなものとも一致しません。以下も参照できます。私の正規表現がXでは動作しますが、Yでは動作しないのはなぜですか?

とにかく交換部分に出て行くだけで\d特別でなくて番号が交換されるので好きなようにはなりません。d+

Perlでは、次のことをしたいかもしれません:

perl -pe 's/(KN\d+)\.1/$1v1/'  file.txt 

括弧内の最初のグループに展開され、点$1は正規表現なのでエスケープされます。すべての文字。または

perl -pe 's/KN\d+\K\.1/v1/'  file.txt 

ここでは\K、置き換えられないように一致の前の部分を終了します。

ただし、ドットのコンテキストに興味がない場合は、tr(またはtr///Perlで)を使用してください。

関連情報