Verbindliche awk
Antwort:
echo "12345" | awk '$1=$1' FS= OFS="."
Ausgabe ist:
1.2.3.4.5
Die Antwort wurde von einer der Lösungen in diesem Beitrag zum Stapelüberlauf geändert .
Wenn ich mit KSH einen String habe 12345
und ihn konvertieren möchte 1.2.3.4.5
, wie kann ich das tun?
Ich habe versucht es zu benutzen, cut
aber es ist nicht unkompliziert.
echo "12345" | cut -c1
Verbindliche awk
Antwort:
echo "12345" | awk '$1=$1' FS= OFS="."
Ausgabe ist:
1.2.3.4.5
Die Antwort wurde von einer der Lösungen in diesem Beitrag zum Stapelüberlauf geändert .
Perl Regex (mit Lookups und Rückverweisen) antwortet, um alles durch alles plus einen Punkt zu ersetzen, außer dem letzten (vorausgesetzt, das war die Frage):
$ echo "12345" | perl -wlpe 's/(.(?=.))/$1\./g' 1.2.3.4.5
Eine sed-Lösung, die mit ksh und / usr / bin / sed unter OpenSolaris getestet wurde
echo "12345" | /usr/bin/sed -e 's/./&\./g' -e 's/\.$//'
Das sollte funktionieren. In bash
und ksh
unter Mac OS X getestet :
echo "12345" | sed 's/\(.\\)/\1./g' | rev | cut -c 2- | rev
Die Ausgabe ist:
1.2.3.4.5
Und eine Aufschlüsselung des Befehls geht so:
echo
ist offensichtlich.sed
String teilt sich in Zeichen auf und fügt dann .
jedes Zeichen hinzu.rev
kehrt die Zeichenfolge um.cut
schneidet die Zeichenfolge basierend auf der Zeichenposition; 2
Ich glaube, das liegt an Newline.rev
wird erneut ausgeführt, um die umgekehrte Zeichenfolge in der ursprünglichen Reihenfolge wiederherzustellen.