tabulator in sed ausgabe?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
roll
Beiträge: 75
Registriert: 29.06.2005 14:21:27
Wohnort: SCHWEIZ
Kontaktdaten:

tabulator in sed ausgabe?

Beitrag von roll » 09.08.2005 16:23:58

hallo leute

Code: Alles auswählen

voyager:/tmp# sed '/192.168.11.8/ c\192.168.11.8 TABULATOR nb-es\' /etc/hosts > /tmp/korrekt
nach dem ersetn string wird gesucht und die komplette zeile mit dem zweiten string ersetzt. und im zweiten string muss ein tabulator sein!

Dort wo jetzt TABULATOR steht möchte ich das zeichen welches sed als TAB akzeptiert.

danke für eure hilfe
..::ROLL::.. [ http://www.debian.org ]

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 09.08.2005 16:37:05

Eventuell musst Du noch double- anstatt single-quotes verwenden.

Gruesse,
Flo

Benutzeravatar
roll
Beiträge: 75
Registriert: 29.06.2005 14:21:27
Wohnort: SCHWEIZ
Kontaktdaten:

Beitrag von roll » 09.08.2005 16:46:46

SORRY weder \t noch \\t funktioniert, habe ich vergessen euch mit zuteilen :-(

Code: Alles auswählen

voyager:/tmp# sed '/192.168.11.8/ c\192.168.11.8 \t nb-es\' /tmp/hosts

voyager:/tmp# sed '/192.168.11.8/ c\192.168.11.8 \\t nb-es\' /tmp/hosts
die ausgabe:

Code: Alles auswählen

192.168.11.200  SAMBA
192.168.11.8 \t nb-es
192.168.11.9    NB-MORITZ
..::ROLL::.. [ http://www.debian.org ]

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 09.08.2005 16:50:04

Code: Alles auswählen

sed '/\b192.168.11.8\b/ c192.168.11.8\tnb-es' /tmp/hosts
beachte auch die \b, du willst ja wahrscheinlich 192.168.11.80 nicht ersetzen

Gruß
gms

Benutzeravatar
roll
Beiträge: 75
Registriert: 29.06.2005 14:21:27
Wohnort: SCHWEIZ
Kontaktdaten:

Beitrag von roll » 10.08.2005 07:35:10

danke für den tip ist aber nicht wichtig, die IP adresse werde ich gleichzeitig ersetzten.

ABER leider hat sich das problem mit dem TABULATOR noch nicht gelöst.

das \t oder \\t funktioniert nicht in der regular-expression von sed !!!!!!
..::ROLL::.. [ http://www.debian.org ]

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 10.08.2005 08:30:08

Hallo roll,
bei mir klappt die Zeile von "gms" ohne Probleme - mit kleiner Korrektur :wink:

Code: Alles auswählen

sed '/\b192.168.11.8\b/ c192.168.11.8\tnb-es' /etc/hosts >  /tmp/hosts 
Gruß fuzzy

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 10.08.2005 09:05:20

Hast du jetzt nur die Input/Outputdatein ausgetauscht oder übersehe ich etwas wesentliches

[edit]
bei mir funktionierts natürlich auch, sonst hätte ich "ungetestet" dazugeschrieben
[/edit]

Benutzeravatar
roll
Beiträge: 75
Registriert: 29.06.2005 14:21:27
Wohnort: SCHWEIZ
Kontaktdaten:

Beitrag von roll » 10.08.2005 09:41:28

bei mir funktionionierts nicht!!!

mein code, NEU mit " ... " anstelle den ' ... '

Code: Alles auswählen

sed "/192.168.11.8/ c\\192.168.11.8 \t nb-es\\" /tmp/hosts > /tmp/hostsssssssss
meine ausgabe:

Code: Alles auswählen

192.168.11.200  SAMBA
192.168.11.8 \t nb-es
192.168.11.9    NB-MORITZ
die IP adressen werden noch durch variablen ersetzt darum die " ... " jetzt fehlt nur noch die TABULATOR erkennung und ich bin sehhhhhhhhhhhhhr glücklich.

das programm macht schlussendlich mit dem nmblookup befehl von samba eine suche nach allen windows host in der domain und schriebt sie in die /etc/hosts.
alle hosts die nicht online sind erscheinen bei dieser abfrege nicht darum brauche ich diese sed ersetzung.

wenn alle funktioniert poste ich das script. ist wirklich eine gute sache :-)
..::ROLL::.. [ http://www.debian.org ]

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 10.08.2005 10:43:36

sed --version?

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 10.08.2005 10:51:04

roll hat geschrieben:bei mir funktionionierts nicht!!!

Code: Alles auswählen

sed "/192.168.11.8/ c\\192.168.11.8 \t nb-es\" /tmp/hosts > /tmp/hostsssssssss
ich vermute, dass Du schon in der "/tmp/hosts" dieses "\t" drin hast :wink:
was gibt:

Code: Alles auswählen

sed '/\b192.168.11.8\b/ c192.168.11.8\tnb-es' /etc/hosts > /tmp/hostsssssssss
und

Code: Alles auswählen

cat /tmp/hostsssssssss
Gruß fuzzy

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 10.08.2005 11:12:28

fuzzy hat geschrieben: ich vermute, dass Du schon in der "/tmp/hosts" dieses "\t" drin hast :wink:
habe ich auch kurz für möglich gehalten, es sollte aber die ganze Zeile ausgetauscht werden :wink:

Benutzeravatar
roll
Beiträge: 75
Registriert: 29.06.2005 14:21:27
Wohnort: SCHWEIZ
Kontaktdaten:

Beitrag von roll » 10.08.2005 11:12:45

OK, OK ich habe ein fehler gemacht wo weiss ich nicht mit deinem beispiel fuzzy geht es.

doch leider muss ich noch variablen im SED ausdruck einbringen und somit die ' .. ' durch " ..." ersetzten. dann klapts wieder nicht mehr auch \\t geht nicht.

$i steht für die IP-Adresse

Code: Alles auswählen

                hostname="`grep $i /tmp/temp | cut -f2`";
                sed "/$i/ c\\$i\t$hostname\\" /tmp/hosts | grep $i >> /tmp/resultat
die datei /tmp/hosts:

Code: Alles auswählen

192.168.11.200  SAMBA
192.168.11.8    NB-ES
192.168.11.9    NB-MORITZ
und die neue datei welche zum kontrollieren gibt ist /tmp/temp :

Code: Alles auswählen

192.168.11.202                   ws-test
192.168.11.8                                 nb-test
(habe extra klein geschrieben und diverse spaces dazwischen damit man auch den unterschied im resultat sieht)

das resultat sollte nachher so sein :

Code: Alles auswählen

192.168.11.200  SAMBA
192.168.11.9    NB-MORITZ
192.168.11.202  ws-test
192.168.11.8    nb-test
ich muss kontrollieren ob die IP-Adresse bereits vorhanden ist und ob der hostname dazu geändert worden ist.

jetzt funktioniert die komplette abfrage (ist natürlich noch etwas länger als oben), BIS auf den schei.... tabulator :(
Zuletzt geändert von roll am 10.08.2005 11:16:56, insgesamt 1-mal geändert.
..::ROLL::.. [ http://www.debian.org ]

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 10.08.2005 11:16:51

es liegt an diese Backslashes, wozu brauchst du die ?

Code: Alles auswählen

gms1:~# sed "/192.168.11.8/ c\\192.168.11.8 \t nb-es\\" /tmp/hosts
192.168.11.200  SAMBA
192.168.11.8 \t nb-es
192.168.11.9    NB-MORITZ
gms1:~# sed "/192.168.11.8/ c192.168.11.8 \t nb-es" /tmp/hosts
192.168.11.200  SAMBA
192.168.11.8     nb-es
192.168.11.9    NB-MORITZ
Gruß
gms

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 10.08.2005 11:25:21

@gms
...da war ich etwas voreilig :oops:

Benutzeravatar
roll
Beiträge: 75
Registriert: 29.06.2005 14:21:27
Wohnort: SCHWEIZ
Kontaktdaten:

Beitrag von roll » 10.08.2005 11:30:28

DANKE :D :D diese backslashs hatte ich aus meinem script buch, dort ist ein abschnitt über SED. natürlich habe ich mich auf das BUCH verlassen :evil:

jetzt funktioniert alles :-)

in /tmp/hosts stehen die HOSTS von gestern und in der datei /tmp/hosts-neu die hosts welche momentan online sind. diese beiden listen werden kontrolliert mittels diesers scripts. im /etc/hosts soll schlussendlich eine liste von hosts sein die alle umfasst auch welche die offline sind darum diese kontrolle.

mein script:

Code: Alles auswählen

#!/bin/bash

rm /tmp/hosts-tmp;
rm /tmp/hosts-finale;

for i in `cut -f1 /tmp/hosts-neu`; do
        gefunden="`grep $i /tmp/hosts`";
        if [ $? != "0" ]; then
                grep $i /tmp/hosts-neu >> /tmp/hosts-tmp;
        else
                hostname="`grep $i /tmp/hosts-neu | cut -f2`";
                sed "/$i/ c$i\t$hostname" /tmp/hosts | grep $i >> /tmp/hosts-tmp
        fi
done
cat /tmp/hosts-tmp > /tmp/hosts-finale;
cat /tmp/hosts | grep -v -f /tmp/hosts-tmp >> /tmp/hosts-finale;
DANKE an alle, das ist super in diesem forum :D
..::ROLL::.. [ http://www.debian.org ]

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 10.08.2005 11:37:34

roll hat geschrieben:diese backslashs hatte ich aus meinem script buch, dort ist ein abschnitt über SED. natürlich habe ich mich auf das BUCH verlassen :evil:
ist richtig in der Doku stehen die, aber so funktionierts auch mit den Backslashes (nur EIN Blank am Ende eingefügt)

Code: Alles auswählen

gms1:~# sed "/192.168.11.8/ c\\192.168.11.8 \t nb-es\\ " /tmp/hosts
192.168.11.200  SAMBA
192.168.11.8     nb-es
192.168.11.9    NB-MORITZ

Gruß
gms

Antworten