PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RegExp



lameplaya
02-06-2008, 15:23
Hi Leutz,

ich hab folgendes Anliegen. Ich möchte Konfigurationsdateien parsen und dabei aber anschließend die Zeilennummer am Anfang stehen haben.

Also aus diesem hier:

1 # This file describes the network interfaces available on your system
2 # and how to activate them. For more information, see interfaces(5).
3
4 # The loopback network interface
5 auto lo eth0 eth0:test eth0:test1
6 iface lo inet loopback
7 #mapping eth0
8 #script /usr/sbin/guessnet-ifupdown
9 #map HOME eth0-home
10 #map WORK eth0-work
11
12 # The primary network interface
13 #allow-hotplug eth0
14 iface eth0 inet dhcp
15
16 iface eth0:test inet static
17 gateway 192.168.0.1
18 address 192.168.0.13
19 netmask 255.255.255.0
20 # pre-up echo "PRE-UP"
21 # up echo "UP"
22 # down echo "DOWN"
23 # post-down echo "POST DOWN"
24
25 #iface eth0:test1 inet manual
26 # pre-up echo "PRE-UP"
27 # up echo "UP"
28 # down echo "DOWN"
29 # post-down echo "POST DOWN"


Das machen:

5 auto lo eth0 eth0:test eth0:test1
6 iface lo inet loopback
14 iface eth0 inet dhcp
16 iface eth0:test inet static
17 gateway 192.168.0.1
18 address 192.168.0.13
19 netmask 255.255.255.0

Mein Code kann bisher nur selbiges ohne die Zeilennummer, d.h. er müsste irgendwie erweitert werden. Nur weiß ich nicht wie. Hab schon stundenlang versucht, hat aber nix gebracht bisher :(


#!/bin/bash
#
# Skript zum Anzeigen der Interface-Konfigurationsdatei ohne Kommentare
# Tabulatoren, Leerzeilen und mit Zeilennummer am Anfang stehend
#

CONFIGFILE=$1

sed -n -e '/^[^#].*/p' $CONFIGFILE | sed 's/^ *//' | sed 's/^\t*//'


Weiß jemand von euch weiter?

lameplaya
02-06-2008, 16:19
Habs gerade selber herausgefunden...


$CONFIG_MIT_ZEILENNUMMER | sed 's/#.*//' | sed 's/^ *//' | sed 's/^\t*//' | sed -e '/\d*\ \w/!d'

jan61
02-06-2008, 19:10
Moin,

zum sed: Du weisst, dass Du mehrere Befehle per -e-Option an einen sed füttern kannst? Damit würdest Du Dir einige Prozesse einsparen können:
sed -e 's/#.*//' -e 's/^ *//' -e 's/^\t*//' -e '/\d*\ \w/!d'Es geht sogar noch kürzer: Innerhalb des sed kannst Du aufeinanderfolgende Befehle mit ; trennen:
sed 's/#.*//;s/^ *//;s/^\t*//;/\d*\ \w/!d'Und jetzt noch ne kürzere Version ;-) Das Entfernen von Leerzeichen und Tabs kannst Du zusammenfassen, dafür gibt es Zeichenklassen, hier \s:
jan@jack:~/Development/du_tree> echo -e "abc # bla\n x\n\taa" | sed 's/#.*//;s/^\s*//'
abc
x
aa
So, und jetzt das Ganze mit Zeilennummern:
jan@jack:~/Development/du_tree> echo -e "abc # bla\n x\n\taa" | sed 's/#.*//;s/^\s*//' | cat -b
1 abc
2 x
3 aa
Jan