Ich lese eine Menge Dokumentation über sed und bin immer noch ratlos über meinen speziellen Anwendungsfall.
Ich möchte diese Zeile in einer conf-Datei durch meine eigene Zeile ersetzen:
Ersetzen Sie diese Zeile:
#maxmemory <Bytes>mit:
maxmemory 26gb
Folgendes habe ich versucht:
sed s / maxmemory. * Bytes. * / maxmemory 26 GB / /etc/redis/redis.conf
Ich bekomme den Fehler:
sed: -e Ausdruck # 1, char 30: nicht abgeschlossener `s'-Befehl
Was mich verblüfft, weil ich nicht weiß, was das bedeutet. Meine Frage lautet also:
Wie kann ich erreichen, was ich will? Was bedeutet dieser Fehler? (damit ich daraus lernen kann)
/
, wie@
oder|
. Siehe hier: stackoverflow.com/a/9366940/4561887 und hier: unix.stackexchange.com/a/259087/114401 .Tatsächlich
Der Fehler bedeutet, dass Ihre Shell ohne Anführungszeichen Leerzeichen verwendet, um Argumente zu trennen. Der Abstand zwischen
maxmemory
und26gb
wird daher als Beendigung des ersten Arguments betrachtet, dem daher ein Terminal fehlt,/
wennsed
dieses Argument als einer seiner Befehle analysiert werden soll.Wenn Sie Ihren regulären Ausdruck zwischen einfache Anführungszeichen setzen, damit Ihre Shell ihn nicht in mehrere Argumente aufteilt und
sed
als ein einziges Argument übergibt , wird das Problem gelöst:während
funktioniert.
Ich hoffe, das hilft.
quelle
sed
. Es ist die Shell , die das macht.Ihr Anwendungsfall wird mit diesem Befehl gelöst.
quelle