Re: Filtrar comodins/regex de les línies
Eloi <[email protected]>
| Newsgroups | gmane.linux.debian.user.catalan |
|---|---|
| Message-ID | <[email protected]> |
(disculpes, he enviat abans d'hora) El 17/1/24 a les 22:10, Eloi ha escrit: > El 17/1/24 a les 16:10, julio ha escrit: >> >> El 17 de gener de 2024 8:39:26 CET, Narcis Garcia >> <[email protected]> ha escrit: >>> Bones, >>> >>> Tinc un fitxer de text, com podria ser per exemple una llista de >>> números de telèfon (coneguts.txt): >>> 972123456 >>> 972111133 >>> 972111134 >>> 972111135 >>> 972111136 >>> 972789012 >>> però m'agradaria representar-hi rangs compatibles (expressions >>> regulars) per abreviar: >>> 972123456 >>> 9721111.. >>> 972789012 >> Com no estem acotant amb ^ ni amb $ >> >> >> 9 >> 7 >> 2 >> . >> etcètera >> 97 >> 72 >> 21 >> 9. >> .9 >> etc >> 972 >> 97. >> 9.2 >> >> I això sense fent servir només dígits i el caràcter . no literal. >> >> Sembla un problema matemàtic de combinatòria :) >> >> O probablement no ho he entès. >> >> Vagi bé. >> > Suposant que el que es cerca són números de N dígits i que els patrons > de cerca son igualment de N caràcters i no fan servir repeticions (o > sigui, que troben o bé un caràcter específic o bé qualsevol), > existeixen 2^N patrons que coincideixen amb un número de N dígits. Amb > N=9 són 512 patrons compatibles. > > Si a més del . (qualsevol dígit) vols també poder indicar rangs de > dígits [0-9], per a cada posició tens 10 rangs possibles, incloent el > [0-9] equivalent al . i el [d-d] equivalent al dígit específic (en > general, tindries el rang [k-d] (o [d-k] si k>d) per k=0..9 i d > fixat). En aquest cas, són 10^N els possibles patrons que pot complir > un nombre de N dígits, que ja són 100 milions per N=9. > > Si acceptes patrons amb un subconjunt arbitrari de dígits per a cada > posició (posem per cas, els senars), crec que tindries sum(k=1..10, > 10!/((10-k)!·k!)) (tinc la combinatòria molt rovellada), que és una > burrada que després encara s'haurà d'elevar a la novena potència. > > De tots aquests possibles patrons, quin seria el que esperaries com a > resultat correcte? > Per contra, si el que t'interessa saber és, a partir d'una llista predefinida de patrons, quin(s) d'ells trobarien un valor específic, podries fer-ho en un bucle: { while read -n PATTERN; do echo $1 | grep -q "^${PATTERN}$" && echo "$PATTERN"; done; } < coneguts.txt Tingues present que, a priori, no tens cap garantia d'unicitat.