substituindo apenas parte do padrão correspondente em sed

2

Para dezenas de milhares de linhas com a mesma estrutura, quero ir (por exemplo) daqui:

abcd 12345 qwerty asdfg

... até aqui:

abcd 12345,qwerty asdfg

... com

sed 's/[0-9]\ [A-Z]/,/g'

Eu posso igualar o espaço rigth mais os caracteres circunvizinhos (5 q), mas na substituição eu obtenho (obviamente):

abcd 1234,werty asdfg

Além disso, prefiro fazer isso no shell do linux

Como eu poderia combinar e substituir por cada linha apenas aquele espaço que é precedido por um dígito e seguido por uma letra do alfabeto? você me sugeriria outra ferramenta (ou até abordagem) para fazer isso?

    
por geojunkieSCI 25.07.2017 / 01:33

1 resposta

2

Tente:

$ echo 'abcd 12345 qwerty asdfg' | sed -E 's/([[:digit:]]) ([[:alpha:]])/,/g'
abcd 12345,qwerty asdfg

Notas:

  1. Adicionamos -E para obter a sintaxe de regex estendida.

  2. [:digit:] e [:alpha:] são usados no lugar de 0-9 e A-Z para serem seguros em unicode.

  3. Parênteses são usados para criar grupos e podemos fazer referência no texto de substituição. No nosso caso, faz referência ao número e faz referência à carta.

por 25.07.2017 / 01:55

Tags