Forum Doku Wiki Blog

Forumsarchiv 2009, Oktober
MAC Adresse mit sed durch ein * ersetzen

archivierte Beiträge lesen

  1. (PROGRAMMIERTECHNIK) MAC Adresse mit sed durch ein * ersetzen von Klara, 25. 10. 2009, 16:34

MAC Adresse mit sed durch ein * ersetzen

Der folgende Beitrag wurde am 25. 10. 2009, 16:34 Uhr von Klara veröffentlicht.

Hi!

Warum funktioniert folgendes nicht?
echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:34:26:ec:1e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"' |sed 's/\".*:.*:.*:.*:.*:.*\"/bla/g'

ich möchte eigentlich folgendes zurück bekommen
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="*", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Klara

MAC Adresse mit sed durch ein * ersetzen

Der folgende Beitrag wurde am 25. 10. 2009, 16:39 Uhr von hotti veröffentlicht.

 Hi!

> Warum funktioniert folgendes nicht?
> echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:34:26:ec:1e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"' |sed 's/\".*:.*:.*:.*:.*:.*\"/bla/g'

Sicher, dass in der MAC-Addr Doppelpunkte sind?

Hotti
--
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.

MAC Adresse mit sed durch ein * ersetzen

Der folgende Beitrag wurde am 25. 10. 2009, 16:53 Uhr von Klara veröffentlicht.

Hi!

> > Warum funktioniert folgendes nicht?
> > echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:34:26:ec:1e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"' |sed 's/\".*:.*:.*:.*:.*:.*\"/bla/g'
>
> Sicher, dass in der MAC-Addr Doppelpunkte sind?

ja, das steht so in der Datei /etc/udev/rules.d/70-persistent-net.rules (OpenSUSE 11.1)

ifconfig gibt die Doppelpunkte auch aus
scar:~ # ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0d:34:26:ec:1e
          inet addr:10.9.8.7  Bcast:10.9.8.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fec5:dc1a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1092 errors:0 dropped:0 overruns:0 frame:0
          TX packets:482 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:182490 (178.2 Kb)  TX bytes:89328 (87.2 Kb)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:326 errors:0 dropped:0 overruns:0 frame:0
          TX packets:326 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:153681 (150.0 Kb)  TX bytes:153681 (150.0 Kb)

Klara

MAC Adresse mit sed durch ein * ersetzen

Der folgende Beitrag wurde am 25. 10. 2009, 17:59 Uhr von Karla veröffentlicht.

Hi!

> Warum funktioniert folgendes nicht?
> echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:34:26:ec:1e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"' |sed 's/\".*:.*:.*:.*:.*:.*\"/bla/g'
>
> ich möchte eigentlich folgendes zurück bekommen
> SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="*", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

warum wird beim zweiten Aufruf von sed die Ersetzung nicht durchgeführt?

susi:~ # cp -a /etc/udev/rules.d/{70-persistent-net.rules,70-persistent-net.rules.bak}
susi:~ # search=`grep eth0 /etc/udev/rules.d/70-persistent-net.rules`
susi:~ # replace=`echo ${search} |sed -r 's/([0-9a-f]{2}:){5}[0-9a-f]{2}/*/'`
susi:~ # echo ${search}
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:34:26:ec:1e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
susi:~ # echo ${replace}
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="*", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
susi:~ # sed -i "s/${search}/${replace}/g" /etc/udev/rules.d/70-persistent-net.rules
susi:~ # grep eth0  /etc/udev/rules.d/70-persistent-net.rules*
/etc/udev/rules.d/70-persistent-net.rules:SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:34:26:ec:1e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
/etc/udev/rules.d/70-persistent-net.rules.bak:SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:34:26:ec:1e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Klara

MAC Adresse mit sed durch ein * ersetzen

Der folgende Beitrag wurde am 27. 10. 2009, 14:54 Uhr von Candid Dauth veröffentlicht.

Heißa, Karla,

> susi:~ # sed -i "s/${search}/${replace}/g" /etc/udev/rules.d/70-persistent-net.rules

Sollte das nicht -e heißen? -i macht etwas ganz anderes, laut der Man-Page hier. Darüberhinaus dürfte es Probleme geben mit den geschweiften Klammern und Fragezeichen und so weiter in deinen beiden Strings, da diese ja in regulären Ausdrücken eine besondere Bedeutung haben.
Besser wär’s, die ganze Ersetzung in nur einem sed-Befehl durchzuführen, zum Beispiel, indem du ihn so erweiterst (ungetestet):
sed -r 's/([0-9a-f]{2}:){5}[0-9a-f]{2}(.*eth0)/*\2/'`
Dadurch werden nur noch Zeilen gematcht, in denen das eth0 weiter hinten steht, und die zweite Klammer wird mithilfe des \2 wieder an den Ersatzstring drangehängt, sodass sich dort nichts verändert.


Gautera!
Grüße aus Biberach Riss,
Candid Dauth

--
„Soggt da Duaschd zum Hunga:
‚I hob heid noh niggs drunga.‘
Do soggt da Hunga zum Duaschd:
‚Woaßt wos? Dehs is mia wuaschd!‘“

MAC Adresse mit sed durch ein * ersetzen

Der folgende Beitrag wurde am 25. 10. 2009, 21:48 Uhr von Candid Dauth veröffentlicht.

Heißa, Klara,

> Warum funktioniert folgendes nicht?
> echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:34:26:ec:1e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"' |sed 's/\".*:.*:.*:.*:.*:.*\"/bla/g'

Weil das Anführungszeichen in deinem regulären Ausdruck das erste nimmt, was es findet (also das nach SUBSYSTEM=), denn alles bis zum ersten Doppelpunkt trifft ja auf die Beschreibung .* zu. Ebenso alles nach dem letzten Doppelpunkt bis zum letzten Anführungszeichen, auch das passt auf die Beschreibung .*. Die Lösung ist, die Beschreibung der einzelnen Teile der Mac-Adresse so weit zu spezialisieren, dass sie nur noch die tatsächliche Mac-Adresse matcht und nicht mehr den Rest, zum Beispiel, indem du das .* durch ein [0-9a-f]{2} ersetzt, oder was auch immer alles für Werte bei dir herauskommen können.


Gautera!
Grüße aus Biberach Riss,
Candid Dauth

--
„Soggt da Duaschd zum Hunga:
‚I hob heid noh niggs drunga.‘
Do soggt da Hunga zum Duaschd:
‚Woaßt wos? Dehs is mia wuaschd!‘“

MAC Adresse mit sed durch ein * ersetzen

Der folgende Beitrag wurde am 26. 10. 2009, 17:46 Uhr von Klara veröffentlicht.

Hallo

> > Warum funktioniert folgendes nicht?
> > echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0d:34:26:ec:1e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"' |sed 's/\".*:.*:.*:.*:.*:.*\"/bla/g'
>
> Weil das Anführungszeichen in deinem regulären Ausdruck das erste nimmt, was es findet (also das nach SUBSYSTEM=), denn alles bis zum ersten Doppelpunkt trifft ja auf die Beschreibung .* zu. Ebenso alles nach dem letzten Doppelpunkt bis zum letzten Anführungszeichen, auch das passt auf die Beschreibung .*. Die Lösung ist, die Beschreibung der einzelnen Teile der Mac-Adresse so weit zu spezialisieren, dass sie nur noch die tatsächliche Mac-Adresse matcht und nicht mehr den Rest, zum Beispiel, indem du das .* durch ein [0-9a-f]{2} ersetzt, oder was auch immer alles für Werte bei dir herauskommen können.

ok, das ist mir jetzt soweit Klar

warum funktioniert folgender Versuch nicht?

Klara

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4