Ich habe ein paar große Textdateien und in der Datei UNIQS.txt
Ich habe eine Liste von Strings zum grep
aus einer anderen Datei. Der Code, den ich verwende, ist
grep -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
was nichts bewirkt – die generierte Datei ist leer. Aber wenn ich es tue
grep -F -f UNIQS.txt EEP_VSL.uniqs.sam > UNIQ_templates.sam
es funktioniert richtig. Das verwirrt mich, weil ich nicht an grep
gedacht habe würde die Einträge in UNIQS.txt
interpretieren als Regexp-Muster ohne Anführungszeichen und Schrägstriche usw. in der Datei (die es nicht gibt). Ist es im Allgemeinen so, dass, wenn Sie die Muster aus einer Datei erhalten, diese automatisch denkt, dass es sich um Regexp-Muster handelt?
Bearbeiten: In der UNIQS.txt
Datei gibt es durch Zeilenumbrüche getrennte Zeichenfolgen der Form
HWI-ST365:215:D0GH0ACXX:2:1101:10034:186783
(so genannte Vorlagennamen) und die Datei EEP_VSL...
tabulatorgetrennte Spalten mit etwa 14 Spalten und die erste Spalte ist der Vorlagenname, also möchte ich im Grunde die Zeile extrahieren, die jeder Vorlage in der Datei entspricht.
Akzeptierte Antwort:
Das -f
Option gibt eine Datei an, in der grep Muster liest. Das ist genauso wie das Übergeben von Mustern auf der Kommandozeile (mit dem -e
Option, wenn es mehr als eine gibt), außer dass Sie beim Aufrufen von einer Shell möglicherweise das Muster in Anführungszeichen setzen müssen, um zu verhindern, dass darin enthaltene Sonderzeichen von der Shell erweitert werden.
Das Argument -E
oder -F
oder -P
, falls vorhanden, teilt grep mit, in welcher Syntax die Muster geschrieben sind. Ohne Argument erwartet grep grundlegende reguläre Ausdrücke; mit -E
, grep erwartet erweiterte reguläre Ausdrücke; mit -P
(falls unterstützt) erwartet grep reguläre Perl-Ausdrücke; und mit -F
, grep erwartet wörtliche Zeichenfolgen. Dabei spielt es keine Rolle, ob die Muster von der Kommandozeile oder aus einer Datei kommen.
Beachten Sie, dass die Zeichenfolgen Teilzeichenfolgen sind:Wenn Sie a+b
übergeben als Muster dann eine Zeile mit a+b+c
Ist abgestimmt. Wenn Sie nach Zeilen suchen möchten, die genau einen der angegebenen Strings enthalten und nicht mehr, dann übergeben Sie das -x
Option.