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

Re: Filtrar comodins/regex de les línies



Aquesta proposta d'en Joan funciona:

Coneguts="34930000000
3.930000000
.4930000000
44930000000
4.930000000"

echo "$Coneguts" > coneguts.txt

CercantInici="34"

PatroCerca="^$(echo "$CercantInici" | sed -ne 's/\([0-9]\)/[\.\1]/gp')"

echo "$PatroCerca"

grep -E "$PatroCerca" coneguts.txt

GRÀCIES!


El 17/1/24 a les 17:53, Joan Montané ha escrit:


Missatge de Narcis Garcia <debianlists@actiu.net <mailto:debianlists@actiu.net>> del dia dc., 17 de gen. 2024 a les 8:39:

    Bones,


    Algú sap com fer-ho?


Si he entès bé el problema, la cosa seria així:

cat coneguts.txt | grep -E "^[\.3][\.4]"

El que faig és (manualment) canviar cada caràcter del prefix (per exemple, 3) que vols buscar per la parella formada pel mateix caràcter i un punt normal (en l'exemple [\.3]). La resta és senzill, cercar en el fitxer amb dades per l'expressió regular de línies que comencin per l'expressió regular.

Una millora seria fer la conversió "34" a "[\.3][\.4]" de forma automàtica.

Un primer intent pot ser amb 'sed', per exemple:

echo 34 | sed -ne 's/\([0-9]\)/[\.\1]/gp

retorna:
[.3][.4]

que podem usar en l'ordre inicial proposada.

Ajuntant les dues coses...

PREFIX=`echo 34 | sed -ne 's/\([0-9]\)/[\.\1]/gp'`
cat coneguts.txt | grep -E "^$PREFIX"

sembla que hauria de rutllar.

En una única línia...
PREFIX=`echo 44 | sed -ne 's/\([0-9]\)/[\.\1]/gp'` && cat coneguts.txt | grep -E "^$PREFIX"

Sí, uso una variable d'entorn per a guardar el prefix en la forma [\.3][\.4]. Si algú sap com enviar aquesta cadena al grep d'una forma més elegant, que ho digui, sisplau.

És això el que volies?

Salut!
Joan Montané



--

Narcis Garcia

__________
I'm using this dedicated address because personal addresses aren't masked enough at this mail public archive. Public archive administrator should remove and omit any @, dot and mailto combinations against automated addresses collectors.


Reply to: