j'essaie
grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
et obtenir
unknown option to `s'
Qu'est-ce que je fais mal?
Éditer:
Selon les commentaires, le code est en fait correct. Mon code complet ressemblait à quelque chose comme ce qui suit
grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
# my comment
Et il semble que pour une raison quelconque, mon commentaire a été introduit comme entrée dans sed. Très étrange.
/
inreplaceme
ouwiththis
. Essayez:'s#replaceme#withthis#g'
.Réponses:
utilisez l'option --expression
grep searchterm myfile.csv | sed --expression='s/replaceme/withthis/g'
la source
grep 'x' y | sed 'z'
peut être remaniésed '/x/z' y
. Voir aussi utilisation inutile degrep
.utilisez "-e" pour spécifier l'expression sed
cat input.txt | sed -e 's/foo/bar/g'
la source
sed
lit depuis stdin si aucun fichier d'entrée n'est présent.-e
nécessaire? Cela fonctionne sans-e
. Je me demande quel est le but de l'utilisation-e
? Merci.echo foo | sed 's/foo/bar/g'
fonctionne sans-e
, en sortantbar
. J'ai donc dû manquer sa question.-e
si vous n'avez qu'une seule instruction de script. Si vous en avez deux, vous pouvez diresed -e '/foo/!d' -e 's//bar/g'
oused 's/foo!d;s//bar/g'
(ou de manière équivalente, avec une nouvelle ligne au lieu d'un point-virgule).Pour faire une
sed
capture depuis stdin, au lieu d'un fichier, vous devez utiliser-e
.Comme ça:
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}'
la source
Si vous essayez de faire une mise à jour sur place du texte dans un fichier, c'est beaucoup plus facile à raisonner dans mon esprit.
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
la source
vi myfile.csv
:%s/replaceme/withthis/
:wq
et appuyez surEnterVous aurez maintenant le nouveau modèle dans votre fichier.
la source