Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Linux sh scripts - SED

Frage Linux

Mitglied: hausens

hausens (Level 1) - Jetzt verbinden

26.07.2013, aktualisiert 02.08.2013, 2156 Aufrufe, 9 Kommentare, 2 Danke

Hallo,

Ich möchte per SED den Text einer Datei löschen. wenn ich dies auf der cli mache funktioniert es.
01.
sed -e 's\test\\g' hosts.txt
Da ich das ganze aber automatisieren möchte, wird die eingabe die gemacht wird in eine Variable gespeichert. Dann soll die Variable (sprich das was in der var deffiniert wurde) aus dem .txt File gelöscht werden.
Nur funktioniert das nicht.

01.
hostname=test 
02.
sed -e "s\'$hostname'\''\g" hosts.txt;
Wenn man es im "Klartext" löschen möchte funktioniert es. So tut sich nichts.
Ich verwende einen Ubuntu 13.04 Server

fg

Hausens
Mitglied: Lochkartenstanzer
26.07.2013 um 09:10 Uhr
Moin,

Waum nimmst Du \ statt / oder :. \ hat Sonderbedeutungen und man muß mit der Anzahl der "Escapes" imerm gut aufpassen, welche Schicht zum Schluß die \ bekommen soll.

Außerdem nimmst Du in einem Fall double-quoteds und im anderen Fall single-quotes zum Einklammern des Ausdrucks. Auch hier hat das single-quote eine andere bedeutung als das double-quote! und in verbindung mit dem bakslash gibt das dann ganz andere Effekte,

Richtig sollte da also z.B. stehen:

sed -e "s/test//g"
und

 sed -e "s/'$hostname'//g" hosts.txt
Gruß

lks

PS: Setz die Code-Tags in spitze Klammern, dann funktioniert das auch.
Bitte warten ..
Mitglied: Lochkartenstanzer
26.07.2013, aktualisiert um 09:12 Uhr
Nachtrag:

Und die Anzahl der Quotes ist auch "unmatched". Zähl mal durch.

lks
Bitte warten ..
Mitglied: hausens
26.07.2013, aktualisiert 02.08.2013
Vielen dank für die schnelle Andwort.
Ich bin nicht so betagt mit shell scripts.. sollte ich mal ändern

das was ich oben Falsch geschrieben habe kommt dh das ich es per hand nochmals eingegeben habe mir ist klar das ich 2x " brauche
Ich hab das nun mit der Variable versucht und es geht noch immer nicht...

01.
hostname=test 
02.
sed -e "s/'$hostname'//g" hosts.txt
Ausgabe hosts.txt:
test-srv
test

was mach ich noch Falsch?

fg

Hausens
Bitte warten ..
Mitglied: hausens
26.07.2013, aktualisiert 02.08.2013
Ach und weiters sollte das Script nur nach GENAU der Zeichenkette suchen. dachte da an soetwas:

01.
sed -e "s/'^$hostname$'/''/g" hosts.txt 
kommt das hin? was sagt ihr?
Bitte warten ..
Mitglied: jodalein
26.07.2013, aktualisiert 29.07.2013
Hi,
1. du brauchst nicht um bedingt Quotes es reicht wenn alles richtig escaped ist.

2. willst du den eigenen Rechnernamen aus der Datei entfernen?
wenn ja nimm $HOSTNAME = localhost.domain.de (wenn es ein Domain Rechner ist)

3. du musst ein Leerzeichen mit \ escpaen
sed -s /XYZ/\ /g datei


Das geht so nicht:
sed -e "s/'^$hostname$'/''/g" hosts.txt

Das geht:
variable=pc1
sed -i s/$variable/\ /g hosts.txt = entfernt nur den Namen, aber falls dort noch IPs stehen bleiben die erhalten, eher schlecht


Ich vermute jetzt einfach mal es geht um die normale /etc/hosts

dann würde ich es mir einfacher machen um direkt die ganze Zeile zu löschen:
cat hosts.txt |grep -v $variable > tmp.datei && mv tmp.datei hosts.txt


wenn es mehrere Einträge sind die gelöscht werden sollen ist sed und eine schleife die bessere Option.


jodalein
Bitte warten ..
Mitglied: Lochkartenstanzer
26.07.2013 um 13:10 Uhr
Zitat von hausens:
sed -e "s/'$hostname'//g" hosts.txt
was mach ich noch Falsch?

Die Single-Quotes. weglassen. Die sorgen dafür, daß Du nicht den Variableninhalt von hostname, sondern den String "$hostname" suchst. Sorry, habe übersehen, daß Du den Inhalt der Variable meintest und nicht die Variable selbst.

lks
Bitte warten ..
Mitglied: hausens
29.07.2013, aktualisiert 02.08.2013
Morgen,

nein es geht nicht um die /etc/hosts Datei.
es soll nur der Text bzw die ganze Zeile gelöscht werden. Hab aber nun die lösung gefunden:

01.
sed -i "s/^$hostname$//g" hosts.txt 
aber die grep -v Version gefällt mir um einiges besser, danke für den Tipp


fg

Hausens
Bitte warten ..
Mitglied: Lochkartenstanzer
29.07.2013 um 09:54 Uhr
Zitat von hausens:
aber die grep -v Version gefällt mir um einiges besser, danke für den Tipp

Sofern Du die Zeile ganz löschen willst, ist grep das Mittel der Wahl. Sollte aber nur der Zeileninhalt gelöscht werden und die Zeile als Leerzeile erhalten bleiben, ist sed das Bessere.

lks
Bitte warten ..
Mitglied: Lochkartenstanzer
29.07.2013, aktualisiert um 09:58 Uhr
Hallo hausens,

wie ich fürher schon geschrieben hatte, könntest Du noch den Beitrag editieren, daß die Code-Tags in spitzen Klammern sind und auch Deine Kommentare mit Code in code-Tags einklammern und dadurch besser lesbar werden. Erleichtert anderen das Lesen des Beitrags.

lks
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
WDS mit PXE Linux (3)

Frage von HansWurstAugust zum Thema Windows Server ...

Linux Tools
Docker - Minimize your containers with alpine linux

Link von Sheogorath zum Thema Linux Tools ...

Monitoring
System Monitoring für Windows, Linux (5)

Frage von manuelw zum Thema Monitoring ...

Viren und Trojaner
gelöst WHM cPanel Anti Virensoftware für Linux ? (2)

Frage von xpstress zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...