2010-10-21 22 views
18

Könnte jemand diesen Befehl für mich erklären:"sed" Befehl in bash

cat | sed -e 's,%,$,g' | sudo tee /etc/init.d/dropbox << EOF 
    echo "Hello World" 
EOF 

Was bedeutet das "sed" Befehl tun?

+1

sed ist die Abkürzung für "stream editor" - es bearbeitet Ströme von Bytes/Zeichen. –

+1

Sie hätten das als Kommentar zu meiner Antwort fragen können, ich wäre froh gewesen, es zu erweitern. – Benoit

Antwort

22

sed ist die Stream EDitor. Es kann einen ganzen Stapel von really cool things tun, aber die häufigste ist Text-Ersatz.

Der s,%,$,g Teil der Befehlszeile ist der sed Befehl auszuführen. Die s steht für Ersatz, die , Zeichen sind Begrenzer (andere Zeichen können verwendet werden; /, : und @ sind beliebt). Das % ist das passende Muster (hier ein wörtliches Prozentzeichen) und das $ ist das zweite passende Muster (hier ein literales Dollarzeichen). Die g am Ende bedeutet g lobally ersetzen auf jeder Zeile (sonst würde es nur die erste Übereinstimmung aktualisieren).

+1

Aus irgendeinem Grund ersetzt sed alle Zeilen für mich, nicht nur die erste, wenn ich das 'g' am Ende weglasse. z.B. 'sudo sed -i 's, aktiviert = 0, aktiviert = 1,'/etc/yum.repos.d/epel.repo 'in einem Amazon AWS-Image mit der sed-Version 4.2.1 – Programster

+2

sed wird immer auf jeder Zeile ausgeführt. Die Option "g" ersetzt alle Übereinstimmungen in dieser Zeile anstelle der ersten Übereinstimmung in dieser Zeile. –

5

Es liest Hello World (cat), ersetzt alle (g) Vorkommen von % von $ und (über) schreibt sie in /etc/init.d/dropbox als root.

18

Hier sed ersetzt alle Vorkommen von % mit $ in seinem Standard-Eingang.

Als Beispiel

$ echo 'foo%bar%' | sed -e 's,%,$,g' 

wird "foo $ bar $" produzieren.

1

sed ist ein Stream-Editor. Ich würde sagen, versuchen Mann sed.If Sie diesen Mann nicht Seite in Ihrem System diese URL verweisen gefunden:

http://unixhelp.ed.ac.uk/CGI/man-cgi?sed

+1

+1 für die Manpage. –