2012-04-02 11 views
56

Sto cercandoCome faccio a leggere sedendo l'input standard?

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

e ottenere

unknown option to `s' 

Che cosa sto facendo di sbagliato?

Edit:

Come per i commenti che il codice è in realtà corretto. Il mio codice completo assomigliava qualcosa di simile al seguente

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

E sembra che per qualche motivo il mio commento è stato alimentato per immissione nel sed. Molto strano.

+0

Vuoi sostituire il file con 'withthis' al posto di replacename? – Teja

+1

No, non è quello che stai provando. C'è qualcos'altro che manca. –

+6

La mia ipotesi migliore è che nel tuo caso reale hai un '/' in 'replaceme' o' withthis'. Prova: ''s # replaceme # con questo # g''. – cababunga

risposta

77

utilizzare l'opzione --expression

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

Ma non stai salvando il nuovo valore nel file giusto? – Teja

+0

+ SOaddict, questo è solo l'output su stdout, non sta cambiando il myfile.csv. – flickerfly

-8
  1. Aprire il file utilizzando vi myfile.csv
  2. Press Fuga
  3. Tipo :%s/replaceme/withthis/
  4. Tipo :wq e premere Invio

Ora avrai il nuovo motivo nel tuo file.

+3

OP voleva sapere come farlo con sed, non con vim. –

+0

Cosa disse Noe. Inoltre, la tua soluzione vim è inferiore alle alternative sed perché non è (facilmente) programmabile. – weberc2

+2

Non c'è bisogno di downvotare una risposta sotto -1, gente. – Titou

9

uso "-e" per specificare il sed-espressione

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

Mi chiedevo come usare "-e" per specificare che sed-expression può essere letta da stdin? Sed di default legge da stdin? – Tim

+0

si. come la maggior parte degli strumenti un * x, 'sed' legge da stdin se non è presente alcun file di input. –

+0

Grazie. è '-e' necessario? Funziona senza '-e'. Mi chiedo quale sia lo scopo di usare '-e'? Grazie. – Tim

3

Per rendere sed cattura da stdin, invece che da un file, è necessario utilizzare -e.

Ti piace questa:

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}' 
Problemi correlati