Portál AbcLinuxu, 12. května 2025 06:00

Dotaz: Sed a výmena znakov na konkretnom výskyte

4.9.2008 20:31 pupala | skóre: 21
Sed a výmena znakov na konkretnom výskyte
Přečteno: 425×
Odpovědět | Admin
Ahojte

Chcem editovať /etc/network/interfaces sed-om. Regexp na vyhľadanie a zámenu IP mám hotový, ale neviem ako vybrať konkrétne rozhranie, ktorého sa má zmena týkať. Subor vyzera:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.200.4
        netmask 255.255.255.0
        network 192.168.200.0
        broadcast 192.168.200.255
        gateway 192.168.200.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.200.1
        #dns-search 

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

allow-hotplug eth1
iface eth1 inet static
        address 192.168.300.4
        netmask 255.255.255.0
        network 192.168.300.0
        broadcast 192.168.300.255
        gateway 192.168.300.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.200.1
        #dns-search

Potrebujem operovať vždy z konkrétnym rozhraním. Rozmýšľal som hľadať IP jedným regexpom medzi regexpami s "allow-hotplug $rozhranie", a prvým nasledujúcim výskytom regexpu "dns-search". Je to vôbec možné len s pomocou coreutils, alebo treba aj awk. Ešte som s regexpami nerobil a neviem či na toto coreutils stačia.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.9.2008 20:55 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: Sed a výmena znakov na konkretnom výskyte
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevím jak to řešit pomocí sedu, ale pokud bude počet záznamů pro jednotlivá rozhraní stejný, funguje řešení s grepem
grep -A 9 '^allow-hotplug eth0$'
4.9.2008 22:01 pupala | skóre: 21
Rozbalit Rozbalit vše Re: Sed a výmena znakov na konkretnom výskyte
Ahoj.
Ďakujem, ale ja potrebujem to iste aplikovať raz na eth0, inokedy na eth1 alebo eth2.
A v súbore nie je vždy rovnaký počet prázdnych riadkov.

Zaručená je len existencia 1 alebo viacerých rovnakých štruktúr medzi

"allow-hotplug ethX" - ako začiatkom štruktúry a

"dns-search" - ako koncom štruktúry.

4.9.2008 21:50 Sinuhet | skóre: 31
Rozbalit Rozbalit vše Re: Sed a výmena znakov na konkretnom výskyte
Odpovědět | | Sbalit | Link | Blokovat | Admin
Rozmýšľal som hľadať IP jedným regexpom medzi regexpami s "allow-hotplug $rozhranie", a prvým nasledujúcim výskytom regexpu "dns-search".

To jde i primo v sedu: sed -e '/allow-hotplug eth0/,/dns-search/s/old_ip/new_ip/'

4.9.2008 22:11 pupala | skóre: 21
Rozbalit Rozbalit vše Re: Sed a výmena znakov na konkretnom výskyte
Ďakujem

Toto vyzerá veľmi nádejne, idem skúsiť.

Ide mi o to, že výsledok, ak nejaký bude, bude v embedded zariadení,
tak ak tam nemusím ťahať iné vychytávky ako coreutils, je to veľké PLUS.

10.9.2008 10:53 pupala | skóre: 21
Rozbalit Rozbalit vše Re: Sed a výmena znakov na konkretnom výskyte
Vyšlo, ešte raz ďakujem. A ako skúsenejších sa Vás ešte opýtam:
Existuje aj konštrukcia s adresou v tvare /regexp +n2/ t.j. "dva riadky za hľadaným regulárnym výrazom?"
10.9.2008 16:26 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: Sed a výmena znakov na konkretnom výskyte
sed "/regexp/,+2 s/co nahradit/cim nahradit/"
Napr:
printf "a\nb\nc\nd\ne\n" | sed "/b/,+2 s/.*/X/"
a
X
X
X
e

Podle man stranek to ale pracuje jen s "GNU sedem", ale coreutils by snad meli byt GNU
5.9.2008 17:37 oho
Rozbalit Rozbalit vše Re: Sed a výmena znakov na konkretnom výskyte
Odpovědět | | Sbalit | Link | Blokovat | Admin
proc lidi porad delaji veci slozite, kdyz je lze delat i jednoduse :-/ predpokladam ze kdyz mate sed tak mate i ed:
$ ed /etc/network/interfaces EOF
/^iface eth1 inet static
+1,/^$/d
i
      address 1.2.3.4
      netmask 255.255.0.0
      gateway 2.4.5.6

.
w
q
EOF
(pred prvnim EOF maji byt samozrejme dve spicate zavorky ukazujici doleva, ale foru se to zrovna moc nelibi)
Tarmaq avatar 5.9.2008 18:55 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Sed a výmena znakov na konkretnom výskyte
pravda, nekdo by v tom co jste napsal snad mohl videt cosi jednoducheho (ja ne).. nicmene ja reaguju na dotaz ohledne "spicatych zavorek", priste alespon snad budete vedet..

Pod formularem pro vkladani komentare je napoveda, v niz je napsano ze tento znak mate zapisovat jako html entitu - tzn &lt; Nebo je zde i druha moznost - tlacitko primo k tomu urcene - hned vedle tlacitka <code>
Don't panic!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.