shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script]


From: Thobias Salazar Trevisan
Subject: Re: [shell-script]
Date: Thu, 24 Jul 2003 19:59:12 -0300 (BRT)

ae geraldo,

On Thu, 24 Jul 2003, Geraldo wrote:

> Tenho um arquivo assim:
> JOAO DE SOUZA
> JOSE DA SILVA
> 
> e quero que ele fique assim:
> Joao de Souza
> Jose da Silva

parece simples mas não é, porque o de, da, dos, das... você 
quer minusculos. Se fosse a primeira letra para maiuscula, 
poderíamos usar:

$ cat x
JOAO DE SOUZA
JOSE DA SILVA

$ sed ':a;G;s/$/AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz/;
> tc;:c;s/\([A-Za-z]\)\([A-Z]\)\(.*\)\n.*\2\(.\).*/\1\4\3/;ta;
> s/\n.*//' x
Joao De Souza
Jose Da Silva

Mas para trocar aquele D e deixar mais genérica a solução, acho 
que este script é melhor:

$ cat script.sh
#!/bin/bash

$ cat x | while read l;do
echo $l | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;
s/ /\
/g' | sed '/^\(dos\?\|das\?\|de\)$/b;G;
s/$/AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz/;
s/^\(.\)\(.*\)\n.*\(.\)\1.*/\3\2/' | sed ':a;$!N;s/\n/ /;ta'
done

$ ./script.sh
Joao de Souza
Jose da Silva

a idéia é no primeiro sed trocar tudo para a-z e deixar uma 
palavra por linha. Depois trocamos a primeira letra para A-Z 
somente se a palavra não for do da de dos das..., basta adicionar os outros 
termos que você não quer trocar a primeira letra para A-Z.

falow

--- 
thobias
-------
echo 9446046325380026818553633794429812592304650P | dc
-------
http://www.lcp.coppe.ufrj.br/~thobias

____________________________
|                          
| Against - HTML Mail      
| Against - MS ATTACHMENTS 
|                          
----------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]