Como usar o regex apropriado para encontrar um padrão no sed?

1

Eu tenho um arquivo contendo um conjunto de informações, conforme abaixo:

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

Estou tentando alterar apenas todos os que têm [mM] to MS mais mantendo o mesmo padrão. O seguinte sed script foi tentado

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

mas não é específico apenas para [mM] e pode alterar as linhas 4 e 5 como na saída como abaixo:

4       SMS154
5       SMS91

qualquer ajuda é apreciada. tnx!

    
por Daniel 05.12.2016 / 18:29

2 respostas

1

Você está correspondendo a uma substring, começando com "m" , opcionalmente seguido por "s" e, em seguida, seguido por um dígito < em> [0-9] .

O texto nas linhas 4,5 também contém essa subseqüência:

4 S M1 54

5 S M9 1

para que eles sejam substituídos.

Tente prefixar seu padrão com "\ s" para indicar que você está interessado apenas no prefixo da coluna # 2, assim:

sed -r 's/(\s)ms?([0-9])/XX/Ig'
    
por 05.12.2016 / 19:05
0

que tal este aqui? está correto para sua pergunta?

sed -r 's/m([^s])/MS/Ig' file
    
por 19.01.2017 / 15:04