2010-07-14 14 views
61

Ich bin nach einem Grep-Tool, um nach rein literalen Strings zu suchen. Ich suche nach dem Auftreten einer Zeile einer Protokolldatei als Teil einer Zeile in einer separaten Protokolldatei. Der Suchtext kann alle Arten von regulären Sonderzeichen enthalten, z. B. []().*^$-\.Grep für Literal Strings

Gibt es ein Unix-Suchprogramm, das regex nicht verwendet, sondern nur nach literalen Vorkommen eines Strings sucht?

+0

Wonder, warum die Frage war nicht _ "Kann ich' grep' nach literalen Zeichenketten suchen lassen? "_ statt _" Gibt es so etwas wie 'grep', das nach wörtlichen Zeichenketten suchen kann?" _ Flachkopfschraubendreher können an Philips Schraubenköpfe angepasst werden know ';)' – ADTC

Antwort

88

Sie können dafür grep mit der Option -F verwenden.

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

* "newline-separated fixed strings" * Wie kann ich dies an der Terminal-Eingabeaufforderung tun? Ich weiß, ich kann eine Musterdatei erstellen, aber ohne eine Datei, ist es möglich, auf die Eingabeaufforderung zu tun? Durch Drücken der Eingabetaste wird der Befehl offensichtlich ausgeführt. – ADTC

+3

* Ich werde meine eigene Frage beantworten. :) * Sie müssen nur die mehreren festen Strings mit Wiederholungen der '-e'-Option bereitstellen. Wie folgt: 'grep -F -e" fixed1 "-e" fixed2 "-e" fixed3 "-e" fixed4 "'. Keine Zeilenumbrüche erforderlich;) – ADTC

+1

Nicht verfügbar unter Solaris. Stattdessen wird 'fgrep' verwendet. – majkinetor

2

Übergeben Sie -F zu grep.

7

Das ist entweder fgrep oder grep -F die reguläre Ausdrücke nicht tun wird. fgrep ist identisch mit grep -F aber ich ziehe es nicht um die Argumente zu befürchten haben, eigen faul :-) sein

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

Für GNU grep wird fgrep nur als Symlink zu grep zur Verfügung gestellt, der es dauert -F – Daenyth

+3

'egrep' und' fgrep 'sind nicht im POSIX-Standard spezifiziert; 'grep -F 'und' grep -E [sind] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html) –

3

Sie auch awk verwenden können, da sie die Fähigkeit, feste Zeichenfolge zu finden ist, sowie die Programmierung nur Fähigkeiten, zB

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 

Ausgang

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

Dies fügt der vorhandenen akzeptierten Antwort nichts hinzu. –

+0

Ich stimme nicht zu. Es ist eine nützliche Illustration, wie das funktioniert. – timwaagh