próbuję
grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
i coraz
unknown option to `s'
Co ja robię źle?
Edytować:
Zgodnie z komentarzami kod jest faktycznie poprawny. Mój pełny kod był podobny do następującego
grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
# my comment
Wygląda na to, że z jakiegoś powodu mój komentarz był wprowadzany do seda. Bardzo dziwny.
/
inreplaceme
lubwiththis
. Spróbuj:'s#replaceme#withthis#g'
.Odpowiedzi:
użyj opcji --expression
grep searchterm myfile.csv | sed --expression='s/replaceme/withthis/g'
źródło
grep 'x' y | sed 'z'
można poddać refaktoryzacjised '/x/z' y
. Zobacz także bezużyteczne użyciegrep
.użyj "-e", aby określić wyrażenie sed
cat input.txt | sed -e 's/foo/bar/g'
źródło
sed
czyta ze standardowego wejścia, jeśli nie ma pliku wejściowego.-e
konieczne? Działa bez-e
. Zastanawiam się, jaki jest cel używania-e
? Dzięki.echo foo | sed 's/foo/bar/g'
działa bez-e
, wyprowadzającbar
. Więc musiałem przegapić jego pytanie.-e
czy masz tylko jedną instrukcję skryptu. Jeśli masz dwa, możesz powiedziećsed -e '/foo/!d' -e 's//bar/g'
lubsed 's/foo!d;s//bar/g'
(lub równoważnie, z nową linią zamiast średnika).Aby
sed
złapać ze stdin, zamiast z pliku, powinieneś użyć-e
.Lubię 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}'
źródło
Jeśli próbujesz wykonać aktualizację na miejscu tekstu w pliku, o wiele łatwiej jest mi to zrozumieć.
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
źródło
vi myfile.csv
:%s/replaceme/withthis/
:wq
i naciśnijEnterTeraz będziesz mieć nowy wzór w swoim pliku.
źródło