[Risolto]regex con lo stesso match sia in gawk che in mawk

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2842
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

[Risolto]regex con lo stesso match sia in gawk che in mawk

Messaggio da rai »

Ciao a tutti
Facendo circolare un mio script su pc di conoscenti è emerso un bug dovuto al fatto di essermi basato sul mio GNU-awk: invece dove (quasi sempre) il collegamento simbolico awk punta a mawk lo script fallisce.
Per aiutarmi provate sul file allegato questo

Codice: Seleziona tutto

$ awk -F\" '/serial}=="\w*"/{print $2}' udevadm_info.txt
Soltanto per chi ha gawk l'output sarà il voluto seriale numerico, con mawk non si matcha niente, come in questa 12.04
Vi chiedo: come deve essere fatta la regex /serial}=="\w*"/ per ottenere lo stesso risultato con qualsiasi awk? notate che qui i doppi apici non sono caratteri speciali ma caratteri da matchare e credo che il baco stia proprio intorno a questo.

N.B. avrei una soluzione funzionante sia con gawk che con mawk ma bisogna usare grep e una pipe

Codice: Seleziona tutto

$ grep -m1 "sd.: sd." udevadm_info.txt | awk -F": " '{print $2}'
575837314137323734393934
Grazie
Allegati
udevadm_info.txt
(1.15 KiB) Scaricato 28 volte
Ultima modifica di rai il domenica 20 luglio 2014, 13:36, modificato 1 volta in totale.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: regex con lo stesso match sia in gawk che in mawk

Messaggio da UbuNuovo »

A prove fatte sono le classi di caratteri a non venir digerite da mawk!
Per regex compatibili devi usare quelle senza le caratteristiche avanzate di gawk, quindi:

Codice: Seleziona tutto

8-) awk -F\" '/serial}=="[a-zA-Z0-9_]*"/ {print $2}' udevadm_info.txt
575837314137323734393934
8-) mawk -F\" '/serial}=="[a-zA-Z0-9_]*"/ {print $2}' udevadm_info.txt
575837314137323734393934
Non lo sapevo! Grazie per la domanda.

Edit:
Cavolo! Neanche i quantificatori numerici!

Codice: Seleziona tutto

8-) mawk -F\" '/serial}=="[0-9]*"/ {print $2}' udevadm_info.txt
575837314137323734393934
8-) mawk -F\" '/serial}=="[0-9]{24}"/ {print $2}' udevadm_info.txt
8-) 
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: regex con lo stesso match sia in gawk che in mawk

Messaggio da UbuNuovo »

Ho googolato e sono arrivato alle seguenti conclusioni.
Per il discorso {m}/{m,}/{m,n} si tratta di un bug ed esiste anche il file .patch per risolverlo
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=355442#20
Però se uno deve correggere il bug sul sorgente e ricompilare fa prima ad installare gawk.
Poi

Codice: Seleziona tutto

8-) mawk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
...
A quanto pare mawk è abbandonato!

Concludendo: conviene sempre passare a gawk!(Per conto mio)
Salva l'Ucraina! 🇺🇦
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2842
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: regex con lo stesso match sia in gawk che in mawk

Messaggio da rai »

Non lo sapevo! Grazie per la domanda.
Ma grazie a te per la risposta e per l'approfondimento. Mi ero fissato inutilmente a cercare modi per escapare gli apici.
Certo l'implementazione GNU di AWK è più estesa. Però per me il punto era migliorare la portabilità di uno script in ambienti diversi: dato che l'awk più diffuso è mawk, non ha molto senso che lo script richieda prestazioni che solo gawk offre.

E in fondo il mio è solo un `installer' per uno script di backup, per cui viene eseguito una volta soltanto.

Per questo la lista di caratteri tra `bracket' risolve il problema per me
UbuNuovo ha scritto:8-) mawk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
...

A quanto pare mawk è abbandonato!
Però il changeLog arriva al dicembre 2013
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [Risolto]regex con lo stesso match sia in gawk che in ma

Messaggio da UbuNuovo »

Ok, ma non puoi fare affidamento sulla bontà delle versioni di mawk che trovi sulle altre macchine.
Anche perché l'unico rimedio al problema dei quantizzatori numerici si risolve solo con la patch (ho guardato mentre scrivevo questo post le versioni nuove soffrono dello stesso problema).
Comunque avevo dato per scontato che i repo di Ubuntu fossero tenuti aggiornati invece pare proprio di no. :ciao:
Salva l'Ucraina! 🇺🇦
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti