2017-12-18 5 views
0

Ich versuche, einige Zeichenfolgen mit sed in Batch-Konsole zu ersetzen. Meine Eingabe besteht in einer Datei mit Zeilen wie diese:Regulärer Ausdruck nicht korrekt in sed-Befehl

$ head qiimetax_sorted.txt 

A61579.1.1437 
D_0__Bacteria;D_1__Thermotogae;D_2__Thermotogae;D_3__Thermotogales; 
D_4__Fervidobacteriaceae;D_5__Fervidobacterium;Ambiguous_taxa;D_7__; 
D_8__;D_9__;D_10__;D_11__;D_12__;D_13__;D_14__ 
AAAA02020712.626.2096 
D_0__Bacteria;D_1__Proteobacteria;D_2__Alphaproteobacteria;D_3__Rhizobiales; 
D_4__Bradyrhizobiaceae;D_5__uncultured;D_6__Oryza sativa 
Indica Group (long-grained rice);D_7__;D_8__;D_9__;D_10__;D_11__;D_12__; 
D_13__;D_14__ 

Jetzt versuche ich den ‚D_number__‘ string vor dem Namen mit diesem sed Befehl zu löschen und es ist nichts zu ersetzen:

sed -r 's/D_\d+__//g' qiimetax_sorted.txt > qiimesed.txt 

Irgendeine Idee von dem ist das Problem? Danke!

+0

siehe auch [Warum kommt der reguläre Ausdruck Arbeit in X, aber nicht in Y?] (Https://unix.stackexchange.com/questions/119905/why-does-my-regular-expression-work-in-x-but-not-in-y) – Sundeep

Antwort

2

Ihre Regex-Syntax ist Perl mögen.

Also, wenn Sie es behalten wollen:

perl -pe 's/D_\d+__//g' qiimetax_sorted.txt > qiimesed.tx 

oder mit :

sed -r 's/D_[0-9]+__//g' qiimetax_sorted.txt > qiimesed.tx 
+2

Vorschlag: Verwenden Sie '-E' anstelle von' -r'. GNU sed unterstützt beides und soweit ich weiß, unterstützen einige andere sed-Versionen jetzt "-E". – Sundeep