Usando o comando sed converter apenas o primeiro caractere em linha específica com maiúsculas

4

Como posso converter o primeiro caractere de cada palavra na linha após gr-description: para maiúsculas?

Por exemplo:

$ cat /tmp/test1
groMail:
[email protected]
gr-description:
abc-location-999
group-emailid:
[email protected]
members:
[email protected]
[email protected]
[email protected]

O resultado deve ser

groMail:
[email protected]
gr-description:
Abc-Location-999
group-emailid:
[email protected]
members:
[email protected]
[email protected]
[email protected]

Eu tentei o comando abaixo, mas não consigo mesclar

sed -n '/gr-description:/{n;p;}' grp1 | sed 's/\<./\u&/g'
    
por Daya 07.08.2014 / 08:58

1 resposta

5

Parece que você está usando o GNU sed ou outra versão com a extensão \u , portanto, é possível fazer isso:

sed -e '/gr-description/{n;s/\b./\u&/g;}' < test1

Isso combina linhas contendo gr-description e, em seguida, executa tudo no {} nesse ponto. n vai para a próxima linha, imprimindo a que acabamos de comparar e, em seguida, o comando s substitui todos os caracteres que seguem um limite de palavra ( \b ou \< ) com sua versão de capa superior ( \u& ).

Isso faz tudo de uma só vez, sem canalizar um sed para outro, o que não faria o que você queria - você estava apenas obtendo uma linha, em vez de editar o fluxo à medida que avança.

    
por 07.08.2014 / 09:07