Czytam dużo dokumentacji na temat sed i wciąż jestem zakłopotany moim szczególnym przypadkiem użycia.
Chcę zastąpić tę linię w pliku conf własną linią:
Zamień ten wiersz:
#maxmemory <bajty>z:
maxmemory 26 gb
Oto, co próbowałem:
sed s / maxmemory. * bytes. * / maxmemory 26GB / /etc/redis/redis.conf
Dostaję błąd:
sed: -e wyrażenie # 1, char 30: niezakończone polecenie `s '
Co mnie zaskakuje, bo nie wiem, co to znaczy. Więc moje pytanie brzmi:
Jak mogę osiągnąć to, czego chcę? Co oznacza ten błąd? (abym mógł się z tego nauczyć)
/
, takiego jak@
lub|
. Zobacz tutaj: stackoverflow.com/a/9366940/4561887 i tutaj: unix.stackexchange.com/a/259087/114401 .W rzeczy samej
Błąd oznacza, że przy braku cudzysłowów twoja powłoka używa spacji do oddzielania argumentów. Przestrzeń pomiędzy
maxmemory
i26gb
jest zatem uważana za kończącą pierwszy argument, który w związku z tym nie ma terminala,/
jeślised
chodzi o parsowanie tego argumentu jako jednego z jego poleceń.Umieszczenie wyrażenia regularnego między pojedynczymi cudzysłowami, aby powłoka nie podzieliła go na wiele argumentów i nie przekazała go
sed
jako jednego argumentu, rozwiązuje problem:podczas
Pracuje.
Mam nadzieję, że to pomaga.
źródło
sed
tak. To powłoka to robi.Twój przypadek użycia zostanie rozwiązany przez to polecenie.
źródło