Bash: Ich möchte Buchstaben zählen und Text ersetzen

388
DrManhattan

OK, also bin ich extrem neu im Bash-Shell-Scripting und war bis zu diesem Zeitpunkt ziemlich erfolgreich. Ich benutze BASH, um ein Problem zu beheben ...

Ich möchte einen einfachen Domainnamen: Buddies.forlife.com in | 07 | Buddies | 07 | forlife | 03 | com umwandeln

Grundsätzlich brauche ich es, um die Buchstaben zu zählen und in Hex umzuwandeln. Um klar zu sein, konvertieren Sie nicht den Domainnamen in Hex, sondern die Anzahl der Buchstaben in Hex. Es fällt mir schwer, den Punkt "."

Ich hoffe du verstehst was ich erreichen will ...

Danke für die Hilfe im Voraus!

-1
Sie haben also die Zählung gelöst und möchten, dass wir Ihnen sagen, wie Sie die Perioden ersetzen können? a CVn vor 8 Jahren 0
Gut beides wenn möglich. Ich habe diese Zahlen eingeklemmt, um das Ergebnis zu zeigen, nach dem ich suche. DrManhattan vor 8 Jahren 0
Ach ja und die Zählung ist in hex so nach den Zahlen ... 0a, 0b .... du bekommst den Rest. DrManhattan vor 8 Jahren 0

1 Antwort auf die Frage

0
Argonauts

Hier ist ein einfacher Weg, dies mit awk zu tun

echo "Buddies.forlife.com" | awk -F '.' '{ printf( "|0x%x|%s|0x%x|%s|0x%x|%s\n", length($1),$1, length($2),$2, length ($3), $3 )}' |0x7|Buddies|0x7|forlife|0x3|com 

Der Befehl awk setzt das Feldtrennzeichen -F '.'auf einen Punkt, sodass jedes Segment als eigenes Feld betrachtet wird.

Wir können dann auf diese Felder verweisen $1, $2 and $3, die eingebaute Funktion verwenden length, um die Anzahl der Zeichen für jedes Feld zu ermitteln, und die Ergebnisse mit einem printf ausdrucken ( %xfür Hex-Zahlen, %sfür die ursprünglichen Zeichenfolgen und für die Trennung der Ausgabefelder mithilfe des '|' Symbol in dem von Ihnen angegebenen Format.

Das 0xPräfix wird normalerweise zur Anzeige von Hex-Zahlen verwendet, kann jedoch bei Bedarf in etwas anderes (oder nichts) geändert werden.