View Full Version : espressioni regolari grep
salve a tutti,
ho trovato un esercizio sull'ottimo "introduzione a linux" di guidi-bertacca che non riesco proprio a risolvere...
supponendo di avere un file con il seguente contenuto
prima linea
seconda linea
terza linea
quarta linea
quinta linea
sesta linea
settima linea
ottava linea
nona linea
decima linea
undicesima linea
dodicesima linea
tredicesima linea
quattordicesima linea
fine
estrarre tramite grep tutte le righe che contengono la stringa "li" nelle prime nove posizioni.
grazie.
Gimli[2BV!2B]
09-10-2013, 20:43
Non ti posto la soluzione secca (non sarebbe molto pedagogico...), ti elenco gli ingredienti della mia ricetta (spesso è possibile risolvere in vari modi):
ovviamente si deve specificare che si cerca la stringa li
c{m,n} che cerca le righe che contengono catene del carattere c lunghe da m ad n elementi
^ inizio della riga, non può essere presente alcun carattere a sinistra, lì deve cominciare la riga (o il file)
. che significa che nella sua posizione può esserci qualsiasi carattere
Esempio di esecuzione, anche per aver conferma di aver capito bene il quesito:
gimli@sertan ~ $ cat test.txt
prima linea
seconda linea
terza linea
quarta linea
quinta linea
sesta linea
settima linea
ottava linea
nona linea
decima linea
undicesima linea
dodicesima linea
tredicesima linea
quattordicesima linea
li
123456li
1234567li
12345678li
123456789li
fine
gimli@sertan ~ $ grep -E "**SUSPENCE**" test.txt
prima linea
terza linea
quarta linea
quinta linea
sesta linea
ottava linea
nona linea
decima linea
li
123456li
1234567li
Ottimo! I tuoi indizi mi hanno condotto per mano alla soluzione!!! :)
grep -E "^.{0,7}li" test.txt
Fondamentale l'uso dell'opzione -E che consente l'utilizzo delle espressioni regolari extended. Infatti senza l'opzione il comando corretto sarebbe stato
grep "^.\{0,7\}li" test.txt
Questo perchè senza l'opzione in oggetto è attiva la modalità basic nella quale l'uso delle parentesi tonde e graffe va fatto precedere dal carattere di escape backslash.
Come reputi il livello di difficoltà di questo esercizio? E' deprecabile essere stato tre giorni in meditazione senza riuscire a risolverlo? :muro:
Gimli[2BV!2B]
11-10-2013, 19:58
Non è deprecabile, personalmente scordo la sintassi delle espressioni regolari di continuo... devo sempre invocare San Google per cucire insieme gli elementi che mi affiorano dalla memoria. Per non parlare delle comuni rogne con caratteri che necessitano escape di vario tipo, serie piuttosto folli di slash o effetti collaterali inattesi.
Questo esercizio mi sembra un caso che simula una situazione piuttosto realistica utilizzando vari elementi, evidenziando inoltre che egrep è utile.
Prova a continuare ad esercitarti e vinci la pigrizia cercando di utilizzare le espressioni quando sembrano un minimo utili (e hai il tempo per cercare una soluzione tranquillamente), dovresti tranquillamente diventare un po' più fluente, magari anche salvare la giornata! (http://www.xkcd.com/208/)
;40099266'] magari anche salvare la giornata! (http://www.xkcd.com/208/)
lol :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.