Forum: PC-Programmierung Codesnippet Änderungen einer Zeile


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Linux newbi (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Nachher sollte
1
static ip_address=10.8.8.8/24

Dastehen

von Ralph G. (rhg)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.