
Ich bin also ziemlich neu in der Verwendung von Shell - insbesondere Bash - und bin gerade dabei, ein Skript zu schreiben, das Dateien mit DNA-Sequenzen in ein nützlicheres Format übersetzt. Leider enthalten viele dieser Dateien überflüssige Zeilen, die für Beschriftungsinformationen usw. verwendet werden. Ich brauche einen Sed-Befehl, der diese Zeilen ausschließt, die Sonderzeichen, Zahlen oder Leerzeichen enthalten. Ich habe festgestellt, dass es ziemlich einfach ist, Zeilen mit Leerzeichen zu entfernen, indem man
sed '/ /d' infile
und ich stelle mir vor, dass das Entfernen von Zeilen, die Zahlen enthalten, eine ähnliche Strategie mit regulären Ausdrücken sein wird. Ich habe einfach keine Möglichkeit gefunden, Sonderzeichen in sed zu bearbeiten.
Danke
Antwort1
Um eine Zeile zu löschen, die nicht vollständig aus alphabetischen Zeichen besteht, müssen Sie Start- ( ^
) und Endanker ( $
) hinzufügen.
sed '/^[[:alpha:]]*$/!d' file
Stattdessen können Sie jede Zeile löschen, die mindestens ein nicht-alphabetisches Zeichen enthält
sed '/[^[:alpha:]]/d' file
Beachten Sie, dass das Caret-Zeichen ^
hier als Negationsoperator und nicht als Anker wie im vorherigen Ausdruck fungiert.
Alternativ können Sie die ganzzeilige Option ( -x
oder --line-regexp
) von grep verwenden
grep -x '[[:alpha:]]*' file
(entspricht dem ersten sed-Ausdruck) oder durch Verwendung eines inversen match ( -v
)
grep -v '[^[:alpha:]]' file
(entspricht dem zweiten sed-Ausdruck).
Antwort2
Antwort aus dem Kommentar des OP übernommen
Ich glaube, ich habe es herausgefunden. Ich habe einfach meins so geändert,
sed
dass es so aussieht,sed '/[[:alpha:]]//!d' infile
was - wenn die Logik folgt - jede Zeile ausschließen sollte, die irgendetwas enthält außer[A-Za-z]