Bei einer Textdatei mit durch Leerzeichen getrenntem String und einer durch Tabulatoren getrennten Ganzzahl möchte ich alle Wörter entfernen, die nicht aus Alpha bestehen, aber Wörter, die nur aus Alpha-Zeichen bestehen, und die Tabulatortaste sowie die Ganzzahl danach beibehalten.
Meine Versuche, wie die unten, haben nichts gebracht. Was ich ausdrücken wollte, ist so etwas wie: "Ersetzen Sie alles innerhalb von Wortgrenzen, das mit 0 oder mehr beginnt und endet, und es gibt mindestens eine: Ziffern: oder: Punkt: Zwischen"
sed 's/\b.*[:digits::punct:]+.*\b//g'
sed 's/\b.*[^:alpha:]+.*\b//g'
Was vermisse ich? Siehe Beispieleingabedaten unten.
Vielen Dank!
Eingang:
asdf 754m 563
a2a 754mm 291
754n 463
754 ppp 1409
754pin 4652
pin pin 462
754pins 652
754 ppp </D> 1409
<D> 754pin 4652
pi$n pin 462
754/p ins 652
754 pp+p 1409
754 p=in 4652
Gewünschte Leistung:
asdf 563
291
463
ppp 1409
4652
pin pin 462
652
ppp 1409
4652
pin 462
ins 652
1409
4652
quelle
Wenn ich es richtig verstanden habe, möchte man also Wörter behalten, die entweder alle Wörter oder alle Ziffern haben. Aber sonst nichts, wenn so etwas funktionieren sollte:
(Verwendung mit der mehrzeiligen Flagge)
Wenn Sie Ihre Beispieleingabe ausführen, wird jede Eingabe gefunden, die entweder alle Ziffern oder alle Wörter enthält. Dies ist eine einfachere Lösung im Vergleich zum Auffinden jedes nicht übereinstimmenden Wortes. Sie können jedoch die Daten extrahieren, anstatt die ungültigen Daten zu ersetzen.
quelle