2012-04-02 12 views
56

Ich versucheWie bekomme ich sed, um von der Standardeingabe zu lesen?

grep searchterm myfile.csv | sed 's/replaceme/withthis/g' 

und

unknown option to `s' 

bekommen, was ich falsch mache?

Edit:

sich nach den Kommentaren der Code tatsächlich korrekt ist. Meine vollständige Code glich in etwa wie folgt

grep searchterm myfile.csv | sed 's/replaceme/withthis/g' 
# my comment 

Und es scheint, dass mein Kommentar aus irgendeinem Grund als Eingabe zugeführt wurde in sed. Sehr eigenartig.

+0

Wollen Sie Ihre Datei mit ‚withthis‘ von replacename an der Stelle ersetzen? – Teja

+1

Nein, das ist nicht das, was du versuchst. Da fehlt noch etwas. –

+6

Meine beste Vermutung ist, dass Sie in Ihrem wirklichen Fall ein '/' in 'replaceme' oder' that' haben. Versuchen Sie: ''s # replaceme # mit diesem # g''. – cababunga

Antwort

77

verwenden, um die --expression Option

grep searchterm myfile.csv | sed --expression='s/replaceme/withthis/g' 
+0

Aber Sie speichern nicht den neuen Wert in der Datei richtig? – Teja

+0

+ SOaddict, Dies wird nur an stdout ausgegeben, es ändert nicht die Datei myfile.csv. – flickerfly

-8
  1. Öffnen Sie die Datei vi myfile.csv
  2. Presse mit Flucht
  3. Typ :%s/replaceme/withthis/
  4. Typ :wq und drücken Geben Sie

Jetzt haben Sie das neue Muster in Ihrer Datei.

+3

OP wollte wissen, wie man es mit sed macht, nicht mit vim. –

+0

Was Noe gesagt hat. Außerdem ist Ihre vim-Lösung der sed-Alternative (s) unterlegen, da sie nicht (leicht) skriptfähig ist. – weberc2

+2

Keine Notwendigkeit, eine Antwort unter -1, Leute downvote. – Titou

9

Verwendung "-e" angeben, die sed-expression

cat input.txt | sed -e 's/foo/bar/g' 
+0

Ich frage mich, wie die Verwendung von "-e" zur Angabe des sed-Ausdrucks sed von stdin lesen kann? Liest sed standardmäßig von stdin? – Tim

+0

ja. Wie die meisten un * x-Tools liest 'sed' von stdin, wenn keine Eingabedatei vorhanden ist. –

+0

Danke. ist "-e" notwendig? Es funktioniert ohne "-e". Ich frage mich, was ist der Zweck der Verwendung von "-e"? Vielen Dank. – Tim

3

Um sed Fang von stdin zu machen, statt aus einer Datei, sollten Sie -e verwenden.

So:

curl -k -u admin:admin https://$HOSTNAME:9070/api/tm/3.8/status/$HOSTNAME/statistics/traffic_ips/trafc_ip/ | sed -e 's/["{}]//g' |sed -e 's/[]]//g' |sed -e 's/[\[]//g' |awk 'BEGIN{FS=":"} {print $4}' 
Verwandte Themen