2010-07-14 13 views
61

Sto cercando uno strumento di tipo grep per cercare stringhe puramente letterali. Sto cercando l'occorrenza di una riga di un file di registro, come parte di una riga in un file di registro separato. Il testo di ricerca può contenere tutti i tipi di caratteri speciali regex, ad esempio []().*^$-\.Grep per stringhe letterali

Esiste un'utilità di ricerca Unix che non usa la regex, ma cerca solo le occorrenze letterali di una stringa?

+0

chiedo perché la questione non era _ "Posso fare' grep' per cercare stringhe letterali? "_ invece di _" Esiste qualcosa come 'grep' che può cercare stringhe letterali?" _ I cacciaviti a testa piatta possono montare le teste a vite Philips, tu know ';)' – ADTC

risposta

88

È possibile utilizzare grep per questo, con l'opzione -F.

-F, --fixed-strings  PATTERN is a set of newline-separated fixed strings 
+0

* "stringhe fisse separate da nuova riga" * Come posso fare questo sul terminale? So che posso creare un file di pattern, ma senza un file, è possibile fare sul prompt? Premendo Invio, ovviamente, si esegue il comando. – ADTC

+3

* Risponderò alla mia stessa domanda. :) * Hai solo bisogno di fornire le multiple stringhe fisse usando le ripetizioni dell'opzione '-e'. In questo modo: 'grep -F -e" fixed1 "-e" fixed2 "-e" fixed3 "-e" fixed4 "'. Nessuna nuova riga richiesta;) – ADTC

+1

Non disponibile su Solaris. Invece è usato 'fgrep'. – majkinetor

2

Passaggio -F a grep.

7

Questo è uno fgrep o grep -F che non farà le espressioni regolari. fgrep è identico a grep -F ma io preferisco non devono preoccuparsi di argomenti, essendo intrinsecamente pigro :-)

grep -> grep 
fgrep -> grep -F (fixed) 
egrep -> grep -E (extended) 
rgrep -> grep -r (recursive, on platforms that support it). 
+0

Per GNU grep, fgrep è appena fornito come collegamento simbolico a grep che lo rende necessario -F – Daenyth

+3

'egrep' e' fgrep 'non sono specificati dallo standard POSIX; 'grep -F' e' grep -E' [are] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html) –

3

è anche possibile utilizzare awk, in quanto ha la capacità di trovare stringa fissa, così come la programmazione funzionalità, ad esempio solo

awk '{for(i=1;i<=NF;i++) if($i == "mystring") {print "do data manipulation here"} }' file 
0
cat list.txt 
one:hello:world 
two:2:nothello 

three:3:kudos 

grep --color=always -F"hello 

three" list.txt 

uscita

one:hello:world 
three:3:kudos 
+1

Questo non aggiunge nulla alla risposta accettata esistente. –

+0

Non sono d'accordo. È un'utile illustrazione di come funziona. – timwaagh

Problemi correlati