2012-01-31 10 views
12

Mi stavo chiedendo quale comando ho bisogno di mettere nel terminale di leggere un file di testo, eliminare tutte le righe che non contengono una determinata parola chiave, e quindi stampare quelle linee su un nuovo file. ad esempio, la parola chiave è "sistema". Voglio essere in grado di stampare tutte le linee che contengono il sistema su un nuovo file separato. GrazieComando terminale per trovare le linee contenenti una parola specifica?

risposta

18

grep è tuo amico.

Ad esempio, si può fare:

grep system <filename> > systemlines.out 

uomo grep e si possono ottenere ulteriori informazioni utili come bene (es: numeri di riga, 1+ linee prima, 1 + righe dopo, negazione - vale a dire: tutto linee che non contengono grep, ecc ...)

Se si utilizza Windows, è possibile installare cygwin oppure è possibile trovare anche un binario win32 per grep.

+0

ricordare per impostazione predefinita grep è case sensitive –

+2

è possibile utilizzare 'grep -i' per renderlo case insensitive, ma non credo che era un requisito. –

-1

grep "sistema" filename> new-filename

Si potrebbe desiderare di renderlo un po 'più intelligente di non includere linee con parole come "dysystemic", ma è un buon punto di partenza.

+0

Si noti che l'opzione '-w' di grep costringerà l'espressione di ricerca di essere un "intera parola", cioè, delimitata da spazi bianchi (tra cui l'inizio e la fine della linea). – ghoti

2

sotto grep comando risolverà il problema ur

grep -i yourword filename1 > filename2 

with -i for case insensitiveness

without -i for case sensitiveness

per imparare come funziona grep ur del server, fare riferimento alla pagina man on ur del server con il seguente comando

man grep 
3
grep '\<system\>' 

cercherà per le linee che contengono la parola sistema , e non sistema come una stringa.

+0

Anche questo ha aiutato! – willykao

Problemi correlati