sed wildcards para qualquer número

0

Estou tentando substituir a string "samples: [any number] com falha em samples: [any number] com a string 'OK' usando sed.

Isso funciona com um único dígito. No entanto, preciso de uma opção para qualquer número:

sed 's/samples : [0-9] failing samples : [0-9]/OK/g' ./sedTest.txt

Antes de dados:

10,foo,bar,samples : 9 failing samples : 7,bar,next Item
10,foo,bar,samples : 99 failing samples : 55,bar,next Item
10,foo,bar,samples : 9229 failing samples : 5225,bar,next Item

Estou tentando conseguir isso ...

10,foo,bar,OK,bar,next Item
10,foo,bar,OK,bar,next Item
10,foo,bar,OK,bar,next Item
    
por Sascha 06.11.2017 / 15:33

1 resposta

0

Como você observou, [0-9] corresponderá a apenas um dígito. Para combinar mais dígitos, é necessário adicionar um quantificador. Como você deseja "um ou mais" dígitos, basta adicionar um caractere + após o colchete. Ele vai combinar avidamente todos os caracteres dentro dos parênteses (neste caso, quaisquer dígitos).

sed 's/samples : [0-9]+ failing samples : [0-9]+/OK/g' ./sedTest.txt

Dependendo de qual sistema você está usando, é possível executar sed com o -r flag (linux) ou -E flag (mac). Isso é para permitir os símbolos regex modernos, como + .

Como alternativa, em vez de usar + , use * . Isso corresponderá a "zero ou mais" em vez de "uma ou mais" ocorrências. A vantagem aqui é que nenhum sinalizador é necessário.

    
por 07.11.2017 / 16:45

Tags