Wie saniere ich in einem Bash-Skript Benutzereingaben?
Ich bin auf der Suche nach der beste Weg, um eine einfache Eingang:
echo -n "Enter a string here: "
read -e STRING
und es sauber durch entfernen von nicht-alphanumerische Zeichen, untere(Fall), und das ersetzen von Leerzeichen durch Unterstriche.
Bestellen egal? Ist tr
die beste /einzige Weg, um darüber zu gehen?
InformationsquelleAutor der Frage Devin Reams | 2008-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als dj_segfault Punkte aus, die Schale kann die meisten dies für Sie. Sieht aus wie Sie haben zu fallen zurück auf etwas externes für untere Gehäuse der string, aber. Für diese haben Sie viele Möglichkeiten, wie der perl-Einzeiler oben, etc., aber ich denke tr ist wohl das einfachste.
Die Reihenfolge ist hier etwas wichtig. Wir wollen, um loszuwerden, der unterstreicht, plus ersetzen Sie Leerzeichen durch Unterstriche, also wir müssen sicher sein, um Streifen unterstreicht den ersten. Durch das warten auf die pass Dinge zu tr bis zum Ende, wir wissen, wir haben nur alphanumerische Zeichen und Unterstriche, und wir können sicher sein, wir haben keine Räume, so dass wir nicht haben, um sorgen über die Sonderzeichen von der shell interpretiert.
InformationsquelleAutor der Antwort Thomee
Bash kann dies alles auf seine eigene, ich danke Ihnen sehr. Wenn Sie sich auf den Abschnitt, der von der Mann-Seite, auf Parameter Expansionwerden Sie sehen, dass die bash integrierten Ersetzungen, Teilzeichenfolgen, trim, rtrim, etc.
Eliminieren Sie alle nicht-alphanumerischen Zeichen
Das ist Occam ' s razor. Keine Notwendigkeit zum starten eines anderen Prozesses.
InformationsquelleAutor der Antwort dj_segfault
Quick and dirty:
STRING=`echo 'dit /ZOU/een test123' | perl -pe's///g;tr/[A-Z]/[a-z]/;s/[^a-zA-Z0-9]//g'`
InformationsquelleAutor der Antwort Thomas
Könnten Sie führen Sie es durch perl.
Bin ich mit ksh-Stil subshell hier, ich bin mir nicht ganz sicher, dass es funktioniert in der bash.
Dass ist das schöne an shell, ist, dass Sie verwenden können, perl, awk, sed, grep....
InformationsquelleAutor der Antwort Axeman
Nach ein bisschen suchen, um es scheint
tr
ist in der Tat der einfachste Weg:Occam ' s razorNehme ich an.
InformationsquelleAutor der Antwort