Ich habe eine Datei, die mehrere Zeilen hat.Bash-Skript löschen Sie eine Zeile in der Datei
Zum Beispiel:
a
ab#
ad.
a12fs
b
c
...
I sed
oder awk
löschen Sie die Zeile verwenden möchten, wenn die Linie Symbole oder Zahlen enthalten. (Ich möchte zum Beispiel löschen: ab #, ad., A12fs .... Zeilen) oder mit anderen Worten, ich möchte nur die Zeile behalten, die [a-z] [A-Z] enthält.
Ich weiß, wie Anzahl Zeile zu löschen,
sed '/[0-9]/d' file.txt
aber ich weiß nicht, wie Symbole Linien zu löschen.
Oder gibt es eine einfache Möglichkeit, das zu tun?
'/ [^ [: alpha:]]! /' Bedeutet „** NOT ** enthält Zeichen, die ** NICHT ** alphabetisch sind ", was ein doppeltes Negativ ist und daher möglichst vermieden werden sollte. –
@Ed Morton, ich sehe in deiner Antwort, wie du eine "awk" Lösung im Vergleich zu dieser gehandhabt hast und deine Methode macht sicherlich Sinn. Wie kann diese Lösung jedoch problematisch sein, oder könnten Sie mich in eine Richtung lenken, in der ich lesen könnte, warum ich die Verwendung eines doppelten Negativs vermeiden sollte? Vielen Dank. – user3439894
Doppelte Negative sind nur schwer zu verstehen, sei es in einer Programmiersprache oder in gesprochener Sprache, und das Negativ eines Negativs ist positiv (- (- 1) = 1). Wenn Sie also mit einem Schreibcode konfrontiert werden, sollten Sie sich die Zeit nehmen um herauszufinden, was die positive Bedingung ist und schreiben Sie das stattdessen. Um das zu erweitern - niemals Variablen negativ schreiben (z.'databaseNotAvailable'), denn dann ist es fast garantiert, dass Sie irgendwo doppelte Negative schreiben müssen (z. B.'! databaseNotAvailable'). Vergleichen Sie mit '! DatabaseIsAvailable' und' databaseIsAvailable'. Entschuldigung, ich kenne keine gute Referenz. –