適切な正規表現を使用してsedでパターンを見つける方法は?

適切な正規表現を使用してsedでパターンを見つける方法は?

次の情報セットを含むファイルがあります。

cat filename
    1   S121
    2   M121
    3   MS121
    4   SM154
    5   SM91 

[mM] to MS私は同じパターンを維持するものだけを変更しようとしました。sed script以下を試しました。

sed -r 's/ms?([0-9])/MS\1/Ig' filename

ただし、これは[mM]に限定されず、行4と5は次のように変更される可能性があります。

4       SMS154
5       SMS91

助けてくれてありがとう。千万です!

答え1

次から始まる部分文字列と一致します。「米」オプションで続いて「S」、その後に数字が続きます。[0-9]

4行と5行のテキストには、次の部分文字列も含まれています。

4SM154

5SM91

だから彼らは交換されました。

パターンにプレフィックスを追加してみてください。「\S」次のように、列2のプレフィックスにのみ興味があることを示します。

sed -r 's/(\s)ms?([0-9])/\1XX\2/Ig'

答え2

これはどうですか?あなたの質問は正しいですか?

sed -r 's/m([^s])/MS\1/Ig' file

関連情報