Das folgende Beispiel zeigt eine große Datei mit dem Namen AT5G60410.gff:
Chr5 TAIR10 gene 24294890 24301147 . + . ID=AT5G60410;Note=protein_coding_gene;Name=AT5G60410
Chr5 TAIR10 mRNA 24294890 24301147 . + . ID=AT5G60410.1;Parent=AT5G60410;Name=AT5G60410.1;Index=1
Chr5 TAIR10 protein 24295226 24300671 . + . ID=AT5G60410.1-Protein;Name=AT5G60410.1;Derives_from=AT5G60410.1
Chr5 TAIR10 exon 24294890 24295035 . + . Parent=AT5G60410.1
Chr5 TAIR10 five_prime_UTR 24294890 24295035 . + . Parent=AT5G60410.1
Chr5 TAIR10 exon 24295134 24295249 . + . Parent=AT5G60410.1
Chr5 TAIR10 five_prime_UTR 24295134 24295225 . + . Parent=AT5G60410.1
Chr5 TAIR10 CDS 24295226 24295249 . + 0 Parent=AT5G60410.1,AT5G60410.1-Protein;
Chr5 TAIR10 exon 24295518 24295598 . + . Parent=AT5G60410.1
Ich habe Probleme, bestimmte Zeilen mithilfe von grep zu extrahieren. Ich wollte alle Zeilen extrahieren, die vom Typ "Gen" oder vom Typ "Exon" sind und in der dritten Spalte angegeben sind. Ich war überrascht, als dies nicht funktionierte:
grep 'gene|exon' AT5G60410.gff
Es werden keine Ergebnisse zurückgegeben. Wo bin ich falsch gegangen?
Sie müssen den |
entziehen. Folgendes sollte die Arbeit erledigen.
grep "gene\|exon" AT5G60410.gff
Standardmäßig behandelt grep die typischen Sonderzeichen als normale Zeichen, sofern sie nicht mit Escapezeichen versehen sind. Sie könnten also Folgendes verwenden:
grep 'gene\|exon' AT5G60410.gff
Sie können den Modus jedoch ändern, indem Sie die folgenden Formulare verwenden, um das zu tun, was Sie erwarten:
egrep 'gene|exon' AT5G60410.gff
grep -E 'gene|exon' AT5G60410.gff
Dies ist eine andere Art des Grepping für einige Optionen:
grep -e gene -e exon AT5G60410.gff
der -e
-Schalter gibt verschiedene Muster an, die übereinstimmen sollen.
Das wird funktionieren:
grep "gene\|exon" AT5G60410.gff
Ich habe diese Frage beim Googeln für ein bestimmtes Problem gefunden, bei dem ich einen piped-Befehl für einen grep
-Befehl verwendet hatte, der den Alternierungsoperator in einer Regex verwendete. Ich dachte, ich würde meine etwas speziellere Antwort einbringen.
Es stellte sich heraus, dass der Fehler, mit dem ich konfrontiert war, der vorherige Pipe-Operator (d. H. |
) und nicht der alternierende Operator (d. H. |
identisch mit dem Pipe-Operator) im grep-regulären Ausdruck war. Die Antwort war für mich die richtige Flucht und ein entsprechendes Zitat von spezielle Shell-Zeichen wie & , bevor davon ausgegangen wurde, dass das Problem bei meinem grep regex lag, der den Wechseloperator betraf.
Der Befehl, den ich auf meinem lokalen Rechner ausführte, war zum Beispiel:
get http://localhost/foobar-& | grep "fizz\|buzz"
Dieser Befehl führte zu dem folgenden Fehler:
-bash: syntax error near unexpected token `|'
Dieser Fehler wurde behoben, indem mein Befehl folgendermaßen geändert wurde:
get "http://localhost/foobar-&" | grep "fizz\|buzz"
Durch die Umgehung des &
-Zeichens mit Anführungszeichen konnte ich mein Problem beheben. Die Antwort hatte überhaupt nichts mit der Wechseloperation zu tun.