[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
|
----------------------------
- [no subject], Geraldo, 2003/07/24
- Re: [shell-script],
Thobias Salazar Trevisan <=