
Mein Originaltext ist
11 2 CDTZ - b00264ab
36 37 CDTB - c2330001
Ich möchte, dass der Ausgabetext wie folgt angezeigt wird:
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01
Ich muss für die Zeichenfolge, die auf den Bindestrich folgt, nach jeweils 2 Zeichen einen Doppelpunkt hinzufügen.
Gibt es einen allgemeinen Textverarbeitungsbefehl, dem ich das zuweisen kann?
- Alle Zeichenfolgen vor (und einschließlich) dem Bindestrich sollten unverändert bleiben.
- Fügen Sie nach jeweils 2 Zeichen nach dem Bindestrich einen Doppelpunkt ein.
Generell muss ich Text vor und nach einem Muster (hier Bindestrich) unterschiedlich verarbeiten.
Meine bisherigen Bemühungen:
- Ich verfüge über Grundkenntnisse in
sed
undawk
. - Wenn es eine Möglichkeit gäbe, dies
sed
innerhalb eines zu tun, würde ich (Bindestrich) als Feldtrennzeichen inawk
festlegen und dies auf tun und dann die ganze Zeile mit drucken .-
awk
sed 's/../&:/g;s/:$//'
$2
print $0
Antwort1
Versuche dies,
awk -v OFS='\t' '{gsub(/../,"&:",$NF); sub(/:$/,"",$NF);}1' file
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01
gsub(/../,"&:",$NF)
fügt:
jedem Paar oder Zeichen ein Ende hinzu.sub(/:$/,"",$NF)
entfernt das Unerwünschte:
am Ende des letzten Feldes, das durch vorheriges Hinzufügen hinzugefügt wurdegsub
Antwort2
Unter der Annahme, dass die Hexadezimalzahl am Ende immer acht Zeichen lang ist:
$ sed 's/\(..\)\(..\)\(..\)\(..\)$/\1:\2:\3:\4/' file
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01