Forum: PC-Programmierung Codesnippet Änderungen einer Zeile


von Linux newbi (Gast)


Lesenswert?

Hallo,
ich suche ein Code snippet um eine Zeile in der DHCP.conf per bash 
script zu ändern.

1
interface tun0                                                            
2
        static ip_address=10.8.8.11/24                                    
3
        static routers=192.168.178.1                                      
4
        static domain_name_servers=127.0.0.1

Nun möchte ich die Zeile
1
                                           
2
        static ip_address=10.8.8.11/24

Ändern per bash Kommando.

Kann mir jdm. helfen??

Danke

von Linux newbi (Gast)


Lesenswert?

Nachher sollte
1
static ip_address=10.8.8.8/24

Dastehen

von Ralph G. (rhg)


Lesenswert?

Moin,

schau dir mal ein paar Beispiele zu 'sed' (man sed) an.
Damit kannst du per regex Änderungen machen.

Ciao

von Ralph G. (rhg)


Lesenswert?

Linux newbi schrieb:
> Nachher sollte
> static ip_address=10.8.8.8/24
>
> Dastehen
1
sed -i -e 's/static ip_address=10.8.8.11\/24/static ip_address=10.8.8.8\/24/' <file>

von Linux newbi (Gast)


Lesenswert?

Kann ich auch irgendwie eine Wildcard für die IP Adresse setzen??? 
Sprich
1
sed -i -e 's/static ip_address=10.*\/24/static ip_address=10.8.8.8\/24/' <file>

 So das es für alle IP Adressen geht die mit 10. Anfangen???



Danke

von Schubladendenken (Gast)


Lesenswert?

Linux newbi schrieb:
> So das es für alle IP Adressen geht die mit 10. Anfangen???

Ersetzte '???' durch '!!!' in deinem Satz.

(Ja, geht. Und was spricht gegen ausprobieren? Geht doch schneller als 
hier eine Nachfrage zu posten.)

von Linux newbi (Gast)


Lesenswert?

Ich probiere da schon seit 2Tage Rum und komme nicht auf die 
Lösung....daher meine Frage damit ich es lernen kann und sehen kann was 
ich falsch mache.....

von linuxnewbi (Gast)


Lesenswert?

Danke für deine Hilfe :)

Und wie kann ich diese Zeile mit dem Leerzeichen
1
10.8.8.4 test

durch
1
11.8.8.4 test

ersetzen??

von Michael (Gast)


Lesenswert?

Du hast doch oben Stichworte und einen vollständigen Befehl für deine 
vorherige Frage erhalten. Anstatt jetzt häppchenweise alle deine 
Probleme lösen zu lassen, könntest du dich einlesen und diese dann 
selber beheben?

"sed whitespace" wäre evtl. ein passender google-Begriff

von Daniel F. (df311)


Lesenswert?

linuxnewbi schrieb:
> durch
> 11.8.8.4 test
> ersetzen??
1
daniel@evilspeak:~$ whois 11.8.8.4
2
[snip]
3
NetRange:       11.0.0.0 - 11.255.255.255
4
CIDR:           11.0.0.0/8                                                     
5
NetName:        DODIIS
6
NetHandle:      NET-11-0-0-0-1                                                 
7
Parent:          ()                                                            
8
NetType:        Direct Allocation
9
OriginAS:                                                                      
10
Organization:   DoD Network Information Center (DNIC)                          
11
[snip]

sicher, dass das eine gute idee ist?

von foobar (Gast)


Lesenswert?

Das Problem ist doch eher, dass nur die Zeile eines bestimmten 
Interfaces geändert werden soll und nicht alle.  Sowas mach ich mit awk:
1
# awk '/^interface/ {i=$2} /ip_address=/&&i=="tun0" {print"\tstatic ip_address=10.8.8.8/24";next} {print}' dhcp.conf >dhcp.conf.new && mv dhcp.conf.new dhcp.conf

In einem Script würde man es etwas übersichtlicher schreiben, z.B. so:
1
f=dhcp.conf
2
awk -v dev=tun0 -v ip=10.8.8.8/24 '
3
    /^interface/            { i=$2 }
4
    /ip_address=/ && i==dev { print"\tstatic ip_address="ip; next }
5
                            { print }
6
' $f >$f.new && mv $f.new $f

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.