Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371

    [Bash] grep, ottenere solo righe corrispondenti

    Ho un file "rubrica":
    codice:
    Mario 111
    Paolo 222
    Pietro 333
    Pamela 444
    Sara 555
    Valeria 666
    Ora se eseguo il comando
    codice:
    grep "Sara" rubrica
    ottengo giustamente soltanto la voce
    codice:
    Sara 555
    invece eseguendo
    codice:
    grep "^S*" rubrica
    ottengo tutto il file con la differenza che la S di Sara è in rosso:
    codice:
    Mario 111
    Paolo 222
    Pietro 333
    Pamela 444
    Sara 555
    Valeria 666
    come posso farmi restituire in output soltanto le righe che "matchano" la ricerca?

  2. #2
    grep già si comporta nel modo in cui chiedi, il problema è nella tua seconda regex, che matcha tutte le righe: infatti "^S*" vuol dire "matcha un numero qualunque di S ad inizio riga", e "un numero qualunque" può anche essere zero S, per cui ogni riga è un match valido.
    Se intendi dire "tutte le righe che iniziano una o più S" allora la regex corretta è "^S+", o più semplicemente "^S" (la differenza tra ^S+ e ^S sta nel fatto che la prima matcha anche le eventuali S che la seguono, mentre la seconda solo la prima S, ma in questo caso è indifferente dato che vai a vedere le righe intere di ciascuna corrispondenza).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371
    Originariamente inviato da MItaly
    grep già si comporta nel modo in cui chiedi, il problema è nella tua seconda regex, che matcha tutte le righe: infatti "^S*" vuol dire "matcha un numero qualunque di S ad inizio riga", e "un numero qualunque" può anche essere zero S, per cui ogni riga è un match valido.
    Se intendi dire "tutte le righe che iniziano una o più S" allora la regex corretta è "^S+", o più semplicemente "^S" (la differenza tra ^S+ e ^S sta nel fatto che la prima matcha anche le eventuali S che la seguono, mentre la seconda solo la prima S, ma in questo caso è indifferente dato che vai a vedere le righe intere di ciascuna corrispondenza).
    grazie, ti sei spiegato in modo perfetto... mi sa che mi conviene ristudiarmi la sintassi delle regex

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.