csplit, regulärer Ausdruck

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

csplit, regulärer Ausdruck

Beitrag von rendegast » 31.05.2009 20:19:03

Ich möchte die xorg.conf teilen, nach den Section-Abschnitten.

Code: Alles auswählen

csplit  $XORG_CONF '/^ *Section/' {*}
Findet die aktiven Section-Zeilen, ich möchte aber auch auskommentierte separieren.
Und dabei die EndSection, SubSection und EndSubSection sind weglassen.

Code: Alles auswählen

csplit  $XORG_CONF '/[(End)(Sub)]Section/' {*}
Findet die nicht gewünschten Abschnitte, regulär funktioniert also ungefähr ;)

Code: Alles auswählen

csplit  $XORG_CONF '/[^(End)(Sub)]Section/' {*}
csplit  $XORG_CONF '/[^db]Section/' {*}
Hiermit komme ich dem Ziel am nächsten,
aber ich muß dabei den nicht auskommentierten "Section"-Zeilen ein Leerzeichen voranstellen:

Code: Alles auswählen

sed -i 's@^Section@ Section@'
Der [^db] zählt scheinbar unbeirrt als vorhandene character-Stelle.
Ein dem [^db] anschließendes *, ? oder {0,1} funktioniert dann wieder nicht.


Mit "funktioniert ungefähr" meine ich dann das:
Eine Kombination splittet gar nichts mehr,

Code: Alles auswählen

csplit  $XORG_CONF '/^ *Section|[^db]Section/' {*}
wogegen der Ausdruck bei egrep aber funktioniert,
da findert er alle "Section" doch läßt die "[(End)(Sub)]Section" weg.

Eine Idee für Modifikation des csplit-Ausdrucks für csplit?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: csplit, regulärer Ausdruck

Beitrag von ThorstenS » 02.06.2009 10:34:29

uih, ich kannte csplit gar nicht, ist bestimmt mal hilfreich.

Wie wäre es, wenn du im 1. Schwung die Datei nach Section..EndSection aufteilst und danach nochmal einen Lauf für die SubSections aufmachst?

Mit +1 am Ende der regex kanst du die die Sectionen komplett einfangen - sprich von Section bis inkl. EndSection:

Code: Alles auswählen

csplit  $XORG_CONF '/[End]Section/+1' {*}
evtl. bringt dich das etwas weiter?!

P.S. was willst du damit anstellen?

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: csplit, regulärer Ausdruck

Beitrag von rendegast » 02.06.2009 16:24:11

Das ist schon elegant, Danke.


P.S. was willst du damit anstellen?

Code: Alles auswählen

$ ls -1 /etc/X11xorg.conf.d/
Separieren
Zusammenbauen
blck.00 section "Screen".conf
blck.01 section "Screen".conf
blck.02 section "ServerLayout".conf
blck.03 section "ServerLayout".conf
blck.04 section "ServerLayout".conf
blck.05 section "ServerLayout".conf
blck.06 section "ServerFlags".conf
blck.07 section "Extensions".conf
blck.08 section "ServerLayout" Identifier "Default Layout".conf
blck.09 section "ServerLayout" Identifier "Layout1024".conf
blck.10 section "ServerLayout" Identifier "Layout800".conf
blck.11 section "ServerLayout" Identifier "Layout1280".conf
blck.12 section "ServerLayout" Identifier "Layout1600".conf
blck.13 section "Files".conf
blck.14 section "Module".conf
blck.15 section "InputDevice" Identifier "Generic Keyboard".conf
blck.16 section "InputDevice" Identifier "Configured Mouse".conf
blck.17 section "Monitor" Identifier "Generic Monitor".conf
blck.18 section "Device" Identifier "nVidia Treiber".conf
blck.19 section "Screen" Identifier "Default Screen".conf
blck.20 section "Screen" Identifier "Screen 1024".conf
blck.21 section "Screen" Identifier "Screen 800".conf
blck.22 section "Screen" Identifier "Screen 1280".conf
blck.23 section "Screen" Identifier "Screen 1600".conf
blck.24 section "Device" # Identifier "Configured Video Device".conf
(Die csplit-prefixe brauche ich noch, da ich noch keine Indizierung bei gleichlautend entstehenden Namen habe,
wie die mehreren "section "ServerLayout".conf")
Ist mit den schlanken xorg.conf eigentlich obsolet,
aber ich bastele trotzdem gern darin herum. :)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: csplit, regulärer Ausdruck

Beitrag von ThorstenS » 03.06.2009 07:55:25

hehe... ok. :D

Antworten