sed/awk entfernen Zeichen an bestimmten Positionen nach der Übereinstimmung

sed/awk entfernen Zeichen an bestimmten Positionen nach der Übereinstimmung

Ich suche nach einer awk- oder sed-Lösung, bin aber in keinem von beiden ein Genie. Ich habe alle Vorschläge gelesen, die mir kamen, als ich mit dem Eintippen begann.

Ich habe eine Datei mit Datenzeilen:

name
 thisdate=Sep  2 23:59:59 2022 GMT
name
 thisdate=Sep 15 23:59:59 2022 GMT

Die Namen und Daten/Uhrzeiten sind alle unterschiedlich, die Tageszahlen stehen immer an der gleichen Stelle und nehmen immer die gleiche Anzahl Zeichen ein (2), die Stunden/Minuten/Sekunden stehen alle immer an der gleichen Position in der Zeile und es handelt sich nicht in jeder Zeile thisdateum ein Datum in der Zukunft und es gibt keine Leerzeilen.

Ich versuche, die Zeit aus diesen Datumszeilen zu entfernen, indem ich „off“ eintippe  thisdate=(das ist ein Leerzeichen vor thisdate) und dann die Zeichen an den Positionen 18-26 lösche (wenn ich richtig gezählt habe).

Ich habe ein paar Dinge ausprobiert, war aber hauptsächlich auf der Suche nach etwas, das meinen Bedürfnissen entspricht und mich in die richtige Richtung weist

  952  sed 's/^\(.\{18\}\)\(.\{26\}\)/\1/' file  <--this may not have worked as I didn't key on a match?
  958  sed -i 's/thisdate=(.{11})18/\26/' file
  959  sed -i 's/thisdate=(.{10})17/\25/' file

Ich bin sicher, dass ich etwas übersehe, aber ich wäre dankbar, wenn mir jemand den richtigen Weg weisen könnte!

Antwort1

Es sieht so aus, als ob es ausreichen sollte, einfach 9 Zeichen nach dem 6. Zeichen zu löschen  thisdate=:

sed 's/^\( thisdate=.\{6\}\).\{9\}/\1/' file

Für die gegebenen Daten würde dies ergeben

name
 thisdate=Sep  2 2022 GMT
name
 thisdate=Sep 15 2022 GMT

verwandte Informationen