GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lesen von Grep-Mustern aus einer Datei?

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.


Linux
  1. Wie entferne ich „Binärdaten“ aus einer Textdatei (z. B. Bash_history)?

  2. Erstellen Sie Text, der Daten aus einer Datei liest?

  3. Linux grep-Befehl

  4. Lesen aus einer Datei in Assembly

  5. Wie erstelle ich eine Datei in Linux aus dem Terminalfenster?

So finden Sie eine Zeichenfolge in einer Datei unter Linux

So extrahieren Sie E-Mail-Adressen aus einer Textdatei unter Linux

Wie kann man einen kontinuierlichen Stream „grep“?

Lesen einer CSV-Datei mit SQL-Abfragen aus der Linux-Shell

Erstellen Sie eine PEM aus einer PPK-Datei

Strace in Datei umleiten