Beim Rückwärtszählen nach 5 Zeichen ein Leerzeichen einfügen

Beim Rückwärtszählen nach 5 Zeichen ein Leerzeichen einfügen

Ich habe eine Datei mit den folgenden Einträgen:

US6DWMD01#DW01DDATAPURGE(060009/28)
US6DWMD01#DW01DDATAPURGE(060009/29)
US6DWMD01#DW01DDATAPURGE(060009/30)
US6DWMD01#DW01DDATAPURGE(060011/01)
US6DWMD01#DW11WPURESUN(060011/01)
US6TPA01#PPAORD__LDBASE(000009/26)
US6TPA01#PPAORD__LGBOX(000009/26)
US6TPA01#PPATDD__DEDMGT(060009/25)
US6TPA01#PPATDD__FLNET(060009/25)
US6TPA01#PPATDD__LORTBLS(060009/25)
US6TPA01#PPATDD__PPATTBLS(060009/25)
US6TPA01#PPATDD__P8020RP(060011/01)

Ich möchte die Befehle cut/sed/awk verwenden, um beim Rückwärtszählen wie unten beschrieben nach 5 Zeichen ein Leerzeichen einzufügen:

US6TPA01#PPATDD__DEDMGT(0600 09/25)
US6TPA01#PPATDD__FLNET(0600 09/25)
US6TPA01#PPATDD__LORTBLS(0600 09/25)
US6TPA01#PPATDD__PPATTBLS(0600 09/25)
US6TPA01#PPATDD__P8020RP(0600 11/01)

Antwort1

Es gibt tatsächlich 6 Zeichen: 2 Ziffern, 1 Schrägstrich, 2 Ziffern, 1 Klammer:

sed 's/.\{6\}$/ &/' < input > output

Das $entspricht dem Zeilenende.

Antwort2

In regulären Ausdrücken $entspricht dies dem Zeilenende. Sie können es daher verwenden, um die letzten 6 Zeichen abzugleichen (in Ihrer Frage werden 5 erwähnt, aber Sie zeigen 6 an, es sei denn, es gibt ein nachfolgendes Leerzeichen, das Sie uns nicht zeigen) und davor ein Leerzeichen hinzuzufügen. Beispiel:

  • Sed:

    sed 's/......$/ &/' file
    

    oder

    sed 's/.\{6\}$/ &/' file
    
  • GNU- oder FreeBSD-sed:

    sed -E 's/.{6}$/ &/' file
    
  • Perl

    perl -pe 's/.{6}$/ $&/' file
    
  • awk

    awk '{sub(/.{6}$/," &");print}' file
    

verwandte Informationen