Usando sed para maiúsculas o primeiro caractere não numérico, deixe os outros como estão

0

Estou tentando converter sequências de caracteres como "123456 a " para "123456 A " ou " t est" para "< b> T est ", mas deixa as maiúsculas existentes como estão, por exemplo testHW se torna TestHW .

Eu tentei muitas tentativas circulando:

sed 's/[[:alpha:]]./\u/'

sem sorte - alguma ideia?

    
por Scott May 27.07.2016 / 05:07

1 resposta

1

ou forma geral \n onde n é um dígito deve ser substituído pelo texto correspondente a correspondente expressão back-referência, que você define agrupando o texto entre \(...\) com BRE ou (...) com ERE.

Com o GNU sed:

$ echo 123456a | sed 's/\([[:alpha:]]\)/\u/'
123456A

ou:

$ echo 123456a | sed -E 's/([[:alpha:]])/\u/'
123456A

Você também pode usar & para se referir ao texto correspondente em vez de à referência anterior:

$ echo 123456a | sed 's/[[:alpha:]]/\u&/'   
123456A

Observe que [:alpha:] corresponde a caracteres minúsculos e maiúsculos, então algo como 123456Aa será deixado como está.

Se você deseja substituir a primeira minúscula por maiúscula correspondente, use [:lower:] :

$ echo 123456Aa | sed 's/[[:lower:]]/\u&/'
123456AA
    
por 27.07.2016 / 05:25

Tags