diff sed nur bestimmte Zeilen behalten [geloest]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

diff sed nur bestimmte Zeilen behalten [geloest]

Beitrag von mclien » 30.05.2009 18:45:20

ich bastel mir gerade einen Wolf an meinen script.
Hintergrund ist: KPilot (bzw. PalmOS) kann keine Su-ToDos verwalten. Also will ich folgendes:
Vor dem sync die pasenden Zeilen auf derm *ics file loeschen und danach wieder einfuegen.
rauswerfen ist einfach:

Code: Alles auswählen

sed -e '/RELATED-TO*/d' mclien_korga.ics > mclien_palm.ics
danach kann ich den sync zum palm machen.
Zurueck soll er die passenden Zeilen wieder einfuegen, also wie macht man aus diesem diff

Code: Alles auswählen

14d13
<  nochmal nur Note\n_________NOTE GEAENDERT_________
17c16
< CATEGORIES:joel
---
> CATEGORIES:projekt
34a34
> RELATED-TO:KOrganizer-1279255085.185
61a62
> RELATED-TO:KOrganizer-1279255085.185
73a75
> RELATED-TO:KOrganizer-521033569.312
85a88
> RELATED-TO:KOrganizer-521033569.312
dieses:

Code: Alles auswählen

34a34
> RELATED-TO:KOrganizer-1279255085.185
61a62
> RELATED-TO:KOrganizer-1279255085.185
73a75
> RELATED-TO:KOrganizer-521033569.312
85a88
> RELATED-TO:KOrganizer-521033569.312
Jetzt bitte nicht: "die ersten x Zeilen loeschen" ;-) (die koennen auch zwischendrin vorkommen)
Ich brauche quasi das sed Kommando "finde die Zeile mit "RELATED-TO" und behalte die und die vorherige.
(alternativ die und die darauf folgende. Das kann man dan ja mit tac 2mal umdrehen)

Was ich schon versucht habe ist:
Umbruch entfernen also aus

Code: Alles auswählen

85a88
> RELATED-TO:KOrganizer-521033569.312
das machen:

Code: Alles auswählen

85a88 > RELATED-TO:KOrganizer-521033569.312
und alle anderen Zeilen loeschen. Dann bekomme ich aber den Umruch nicht wieder zurueck gesezt und ohne kann es patch nicht wieder einlesen.
Vielleicht finde ich ja auch nur das Zeichen fuer CR nicht im sed...
Zuletzt geändert von mclien am 30.05.2009 22:05:02, insgesamt 2-mal geändert.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: diff sed nur bestimmte Zeilen behalten

Beitrag von cosmac » 30.05.2009 19:58:33

hi,

nachdem mir sed zu kryptisch ist, würde ich es rein mit grep probieren:

Code: Alles auswählen

grep -B1 '^> RELATED-TO:' original > faelschung
Beware of programmers who carry screwdrivers.

mclien
Beiträge: 2468
Registriert: 06.12.2005 10:38:46
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Baustelle

Re: diff sed nur bestimmte Zeilen behalten

Beitrag von mclien » 30.05.2009 22:03:52

Ah das war die Erloesung :hail:
nun ists auch wieder der beruehmte 3-Zeiler: (zumindest ohne Kommentare)

Code: Alles auswählen

#!/bin/bash

# Unterschiede in den Korganizer files finden
diff mclien_palm.ics mclien_korga.ics |\

#um nur "RELATED-TO"-Zeilen mit vorheriger diff Zuordnung behalten
grep -B1 '^> RELATED-TO:' > mclien_diff

#RELATED-TO Zeilen einfuegen und in korga schreiben
patch mclien_palm.ics mclien_diff -o mclien_korga.ics

Den Palm immer mit der mclien_palm.ics Datei syncen und danach diese Script laufen lassen und alles wird gut (also alle Sub-ToDos bleiben dem KOrganizer erhalten)

Antworten