Entfernen von nicht-alphanumerischen Zeichen mit sed
Ich versuche zu validieren einige Eingaben, entfernen Sie eine Menge von Zeichen. Nur alphanumerische Zeichen sowie Punkt, Unterstrich, Bindestrich sind erlaubt. Getestet hab ich die regex-Ausdruck [^\w.-]
hier http://gskinner.com/RegExr/, und es entspricht dem, was ich will, entfernt, so dass ich nicht sicher, warum sed
ist wieder das Gegenteil. Was bin ich?
Mein end-Ziel ist die Eingabe "Â10.41.89.50 "
und bekommen "10.41.89.50
".
Ich versucht habe:
echo "Â10.41.89.50 " | sed s/[^\w.-]//g
zurück Â...
echo "Â10.41.89.50 " | sed s/[\w.-]//g
und echo "Â10.41.89.50 " | sed s/[\w^.-]//g
zurück Â10418950
Versuchte ich die Antwort hier gefunden Überspringen/entfernen von nicht-ascii-Zeichen mit sed aber nichts wurde entfernt.
-r
option auf sed
, so wird es erkennen erweiterte reguläre Ausdrücke. sed
nicht verstehen, die besonderen Charakter-Klassen wie \ - w
. Verwenden Sie einfach [a-zA-Z0-9_-]
. -r
oder [a-zA-Z0-9_-]
arbeitet. Auch echo "Â10.41.89.50 " | sed s/[a-zA-Z0-9.-]//g
zurückgegeben Â
echo "Â10.41.89.50 " | sed s/[^a-zA-Z0-9.-]//g
ausgegeben Â10.41.89.50
. InformationsquelleAutor der Frage gorideyourbike | 2013-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
tr's
-c
(Ergänzung) - flag kann eine option sein,InformationsquelleAutor der Antwort iruvar
Möchten Sie vielleicht die Verwendung der
[:alpha:]
Klasse statt:funktionieren sollte. Wenn nicht, müssen Sie möglicherweise ändern Sie Ihre lokalen Einstellungen.
Auf der anderen Seite, wenn Sie nur wollen, halten Sie die Ziffern, der Bindestrich und der Zeit::
Wenn Ihr string ist eine variable, die Sie verwenden können, Reine bash und parameter-Erweiterungen:
oder
Können Sie auch einen Blick auf
1_CR
's Antwort.InformationsquelleAutor der Antwort gniourf_gniourf
Sowie sed keine Unterstützung für unicode-Zeichen. Verwenden
perl
statt:InformationsquelleAutor der Antwort anubhava
Diese hat Prima funktioniert für mich. Sie erhalten alle Charaktere, die ich angegeben für meine Zwecke.
InformationsquelleAutor der Antwort technerdius
Basierend auf anubhava Antwort, dieser arbeitete für mich:
Ersetzt alles andere als alphanumerische mit Leerzeichen.
Hinweis: ". " - Zeichen bekommen, erhalten
InformationsquelleAutor der Antwort Iwan Plays