[linux-l] Textdatei automatisiert ändern

Hauke Laging mailinglisten at hauke-laging.de
Do Mai 30 16:17:51 CEST 2013


Am Do 30.05.2013, 15:31:34 schrieb Boris Kirkorowicz:

> statt
> DTSTART;VALUE=DATE:20130215
> DTEND;VALUE=DATE:20130219
> 
> steht da:
> DTSTART;TZID="Europe/Madrid":20130215T040000
> DTEND;TZID="Europe/Madrid":20130218T200000
> 
> Ersteres wäre aber richtig. Einfach sed drauf loszulassen wird wohl
> wegen der Bedingungen nicht funktionieren -oder doch?

sed kann keine Datumswerte ausrechnen; schon daran scheitert es. Soweit ich 
weiß, kann sed überhaupt nicht rechnen.

Man kann das sicherlich mit awk machen. Aber da sed gewünscht ist, habe ich 
den ersten Teil mit sed gemacht (der prüft allerdings nicht, ob es sich um das 
gewünschte Zeilenpaar handelt; wenn das gefordert ist, landet man wohl doch 
bei awk (oder mehr Shellcode):

echo 'DTSTART;TZID="Europe/Madrid":20130215T040000
DTEND;TZID="Europe/Madrid":20130218T200000' |

sed -n -e '/^DTSTART;TZID="Europe\/Madrid":20......T040000$'\
'/{s+TZID="Europe/Madrid"+VALUE=DATE+;s/T040000$//}' \
-e '/^DTEND;TZID="Europe\/Madrid":20......T200000$'\
'/{s+TZID="Europe/Madrid"+VALUE=DATE+;s/T200000$/+++1/}' -e p

Das kann man dann hierrein pipen:

while IFS= read -r line; do
  if [[ ! $line =~ "+++"1$ ]]; then
    echo "$line"
  else
    linetail="${line##*:}"
    linehead="${line%"$linetail"}"
    date="${linetail%+++1}"
    nextday="$(date --date="${date} + 1 day" +%Y%m%d)"
    echo "${linehead}${nextday}"
  fi
done


CU

Hauke
-- 
☺
PGP: 7D82 FB9F D25A 2CE4 5241 6C37 BF4B 8EEF 1A57 1DF5 (seit 2012-11-04)
http://www.openpgp-schulungen.de/
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 572 bytes
Beschreibung: This is a digitally signed message part.
URL         : <https://mlists.in-berlin.de/pipermail/linux-l-mlists.in-berlin.de/attachments/20130530/79718b41/attachment.sig>


Mehr Informationen über die Mailingliste linux-l