Verwenden von sed zum Entfernen aller Zeilen, die Sonderzeichen, Zahlen und Leerzeichen enthalten

Verwenden von sed zum Entfernen aller Zeilen, die Sonderzeichen, Zahlen und Leerzeichen enthalten

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 ( -xoder --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, seddass es so aussieht, sed '/[[:alpha:]]//!d' infilewas - wenn die Logik folgt - jede Zeile ausschließen sollte, die irgendetwas enthält außer[A-Za-z]

verwandte Informationen