Sto usando il grep -f
funzione per estrarre le linee da un file che corrisponde a un particolare modello. Diciamo che il mio file di pattern è pattern.txt
, come segue.
1
2
3
4
5
E il file su cui sto facendo corrispondere questo modello è file.txt
,
1::anv
2::tyr
3::yui
4::fng
5::gdg
6::ere
7::rer
8::3rr
9::gty
Ora quando eseguo grep -f pattern.txt file.txt, sto ricevendo questo ->
1::anv
2::tyr
3::yui
4::fng
5::gdg
8::3rr
L'ultima riga nell'output sopra, sta causando il mio problema. Come modifico questo comando grep in modo da ottenere l'output (mostrando corrispondenze corrette) come segue?
1::anv
2::tyr
3::yui
4::fng
5::gdg
risposte:
12 per risposta № 1Inserisci ^
prima dei tuoi schemi così grep
corrisponderà all'inizio di una linea con il tuo modello. Se il tuo modello è in realtà un insieme di numeri, non hai bisogno di un elenco di modelli ^[1-5]:
.
6 per risposta № 2
Bene, ci sono molte possibili soluzioni. Stai dicendo grep
per trovare tutte le righe contenenti un 3, e la riga "8 :: 3rr" contiene infatti un 3. quindi devi essere più specifico in ciò che stai cercando.
Ad esempio, puoi cambiare i pattern in "1:"," 2: ", ecc. Per far corrispondere solo i numeri seguiti da due punti, oppure puoi cambiarli in" ^ 1 "," ^ 2 ", ecc. Per far combaciare solo i numeri all'inizio della riga. i tuoi dati, ma probabilmente vuoi entrambi, in modo che la ricerca di "1:" non corrisponda a "21:" e la ricerca di "^ 5" non coincida "53:". In questo caso il tuo file di pattern sarebbe come questo:
^1:
^2:
^3:
^4:
^5: