2012-04-02 16 views
56

StaramJak pobrać sed z poziomu standardowego wejścia?

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

i coraz

unknown option to `s' 

Co robię źle?

Edytuj:

Zgodnie z komentarzami kod jest rzeczywiście poprawny. Mój pełny kod przypominał coś podobnego do poniższego: Wygląda na to, że z jakiegoś powodu mój komentarz był podawany jako wejście do sed. Bardzo dziwny.

+0

Czy chcesz zastąpić plik 'withthis' w miejscu replacename? – Teja

+1

Nie, to nie jest to, co próbujesz. Czegoś brakuje. –

+6

Moje najlepsze przypuszczenie jest takie, że w twoim prawdziwym przypadku masz '/' in 'replaceme' lub' withthis'. Spróbuj: '' s # replaceeme # withthis # g''. – cababunga

Odpowiedz

77

należy wybrać opcję --expression

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

Ale nie zapisujesz nowej wartości w pliku, prawda? – Teja

+0

+ SOaddict, To jest wyjście do standardowego wyjścia, nie zmienia pliku myfile.csv. – flickerfly

-8
  1. Otwórz plik za pomocą vi myfile.csv
  2. Naciśnij Ucieczka
  3. Rodzaj :%s/replaceme/withthis/
  4. Type :wq i naciśnij Wprowadź

Teraz będziesz mieć nowy wzór w swoim pliku.

+3

OP chciał wiedzieć, jak to zrobić z sed, nie z vimem. –

+0

Co powiedziała Noe. Również twoje rozwiązanie vima jest gorsze od wersji (ów) sed, ponieważ nie jest (łatwo) skryptowalne. – weberc2

+2

Nie trzeba dodawać odpowiedzi poniżej -1, ludzie. – Titou

9

użytkowania "-e", aby określić SED-wyrażenie

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

Zastanawiam się, w jaki sposób za pomocą "-e" do określenia wyrażenia sed można uzyskać sed przeczytać z stdin? Czy sed domyślnie czyta ze standardowego wejścia? – Tim

+0

tak. jak większość narzędzi un * x, 'sed' czyta ze stdin, jeśli nie ma pliku wejściowego. –

+0

Dzięki. czy '-e' jest niezbędne? Działa bez '-e'. Zastanawiam się, jaki jest cel używania '-e'? Dzięki. – Tim

3

Aby uczynić sed połów z stdin zamiast z pliku, należy użyć -e.

Jak to:

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}' 
Powiązane problemy