2017-10-24 1 views
2

Ich habe eine Datei wiesed fastq regex

head testSed.fastq 
@M01551:51:000000000-BCB7H:1:1101:15800:1330 1:N:0:NGTCACTN+TATCCTCTCTTGAAGA 
NGTCACTN 
+ 
#>AAAAF# 
@M01551:51:000000000-BCB7H:1:1101:15605:1331 1:N:0:NATCAGCN+TAGATCGCCAAGTTAA 
NATCAGCN 
+ 
#>>AA?C# 
@M01551:51:000000000-BCB7H:1:1101:15557:1332 1:N:0:NCAGCAGN+TATCTTCTATAAATAT 
NCAGCAGN 

Und ich bin versucht zu ersetzen Sie die Zeichenfolge nach dem letzten Doppelpunkt mit 0 (in diesem Beispiel auf den Linien 1,5,9 finden und ersetzen - aber global) mit einem regulären Ausdruck.

Ich habe meine Regex mit egrep egrep '[ATGCN]{8}\+[ATGCN]{16}$' testSed.fastq überprüft, die alle Zeilen zurückgibt, die ich erwarten würde.

Wenn ich jedoch versuche, sed -i 's/[ATGCN]{8}\+[ATGCN]{16}$/0/g' testSed.fastq zu verwenden, ist die ursprüngliche Datei unverändert und es tritt kein Austausch auf.

Wie kann ich das beheben? Ist meine Regex nicht spezifisch genug?

+2

Sie müssen entkommen '{}' oder verwenden '-E/-r' – 123

+0

können Sie erarbeiten? – skurp

+1

@skurp, schlägt Benutzer 123 'sed -E-i ...' vor, um erweiterte reguläre Ausdrücke im egrep-Stil zu aktivieren. –

Antwort

1

Ihre regex ist als ERE strukturiert statt einer BRE, die Standard-Interpretation des sed wird. Nicht alle sed-Implementierungen unterstützen ERE, aber Sie können man sed in Ihrer Umgebung überprüfen, um festzustellen, ob dies für Sie möglich ist. Suchen Sie nach -r oder -E Optionen. Sie können Schranken alternativ verwenden, indem Sie den geschweiften Klammern die umgekehrte Schrägstriche voranstellen.

Das heißt, anstatt nur den genauen Text im letzten Feld, warum nicht einfach nach der Zeichenfolge suchen, die mit einem Doppelpunkt beginnt, und wird gefolgt von Nicht-mehr-Doppelpunkte? Das folgende RE ist sowohl BRE- als auch ERE-kompatibel.

$ sed '/^@/s/:[^:]*$/:0/' testq 
@M01551:51:000000000-BCB7H:1:1101:15800:1330 1:N:0:0 
NGTCACTN 
+ 
#>AAAAF# 
@M01551:51:000000000-BCB7H:1:1101:15605:1331 1:N:0:0 
NATCAGCN 
+ 
#>>AA?C# 
@M01551:51:000000000-BCB7H:1:1101:15557:1332 1:N:0:0 
NCAGCAGN