[Risolto] sostituzioni caratteri

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
gabo
Prode Principiante
Messaggi: 69
Iscrizione: giovedì 19 aprile 2007, 0:26

[Risolto] sostituzioni caratteri

Messaggio da gabo »

Ciao,

ho un problema con uno script... praticamente partendo da una parola riesco a scriverla i tutti i modi possibili (maisucolo e minuscolo).
Ad esempio dalla parola CIAO riesco ad ottenre:

ciao
ciaO
ciAo
ciAO
cIao
cIaO
cIAo
cIAO
Ciao
CiaO
CiAo
CiAO
CIao
CIaO
CIAo
CIAO

che sono le 16 combinazioni possibili di maiuscole e minuscole.

Ora vorrei fare in modo di definire per ogni lettera uno o più simboli e ricalcolare le possibili combinazioni.
Ad esempio la lettera "a" o "A" vorrei sostituirla con "@" o con "4" e la lettera "i" o "I" con "1" etc...e calcolare quindi tutte le relative varianti tenendo presente che se la parola fosse stata "CIAI" le sostituzioni della lettera "I" dovrebbero avvenire in due tempi in modo da calcolare anche la possbilità che esista un C1Ai o CIA1 e non solo un C1A1. (Spero si capisca)

Se il file con la scritta CIAO nei sedici casi sopra elencati fosse contenuta nel file output.txt potrei sostituira le "a" e le "A" con il "4" in questo modo:

cat output.txt | tr a 4 > temp1.txt
cat output.txt | tr A 4 > temp2.txt
cat output.txt | tr a 4 | tr A 4 > temp3.txt
cat temp1.txt temp2.txt temp3.txt >> def1.txt
awk ' !x[$0]++' def1.txt > def2.txt

Solo che poi dovrei fare la stessa cosa per sostituire le "a" e le "A" con il "@" e fare il merge con tutte le altre varianti.... cioè la "A" o "a" scritta come "@" o "4" e la "C" o "c" scritta come "(" e/o la "i" o "I" scritta come "1" e via dicendo...
Mi rendo conto che il mio codice alla lunga è ingestibile in questo modo ... avete qualche idea??
Ultima modifica di gabo il domenica 7 dicembre 2008, 15:32, modificato 1 volta in totale.
Avatar utente
takeshi
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 789
Iscrizione: venerdì 24 novembre 2006, 18:33

Re: sostituzioni caratteri

Messaggio da takeshi »

In un linguaggio "normale" ti consiglierei di usare un FOR per ogni lettera:

for x in (c,C)
    for y in (i,I,1)
etc.etc


Ma in bash puoi usare le parentesi graffe:

Codice: Seleziona tutto

echo {c,C}{i,I,1}{a,A,@,4}{o,O}
Per parole più lunghe, probabilemente ti conviene il metodo dei FOR annidati di cui sopra ;)
Raising Elephants Is So Utterly Boring
gabo
Prode Principiante
Messaggi: 69
Iscrizione: giovedì 19 aprile 2007, 0:26

Re: sostituzioni caratteri

Messaggio da gabo »

Geniale la cosa dell' echo .... caspita!
mi hai risparmiato un sacco di righe di codice !
Grazie mille!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti