estoy intentando
grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
y conseguir
unknown option to `s'
¿Qué estoy haciendo mal?
Editar:
Según los comentarios, el código es realmente correcto. Mi código completo se parecía a lo siguiente
grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
# my comment
Y parece que, por alguna razón, mi comentario se introdujo como entrada en sed. Muy extraño.
/
inreplaceme
owiththis
. Proveedores:'s#replaceme#withthis#g'
.Respuestas:
usa la opción --expression
grep searchterm myfile.csv | sed --expression='s/replaceme/withthis/g'
fuente
grep 'x' y | sed 'z'
se puede refactorizar ased '/x/z' y
. Véase también uso inútil degrep
.use "-e" para especificar la expresión sed
cat input.txt | sed -e 's/foo/bar/g'
fuente
sed
lee desde stdin si no hay un archivo de entrada presente.-e
necesario? Funciona sin-e
. Me pregunto ¿cuál es el propósito de usar-e
? Gracias.echo foo | sed 's/foo/bar/g'
funciona sin-e
salidabar
. Así que debo haber perdido su pregunta.-e
si solo tiene una única declaración de script. Si tiene dos, puede decirsed -e '/foo/!d' -e 's//bar/g'
osed 's/foo!d;s//bar/g'
(o de manera equivalente, con una nueva línea en lugar de un punto y coma).Para realizar
sed
capturas desde stdin, en lugar de desde un archivo, debe usar-e
.Me gusta esto:
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}'
fuente
Si está tratando de hacer una actualización in situ de texto dentro de un archivo, esto es mucho más fácil de razonar en mi mente.
grep -Rl text_to_find directory_to_search 2>/dev/null | while read line; do sed -i 's/text_to_find/replacement_text/g' $line; done
fuente
vi myfile.csv
:%s/replaceme/withthis/
:wq
y presioneEnterAhora tendrá el nuevo patrón en su archivo.
fuente