Я читаю много документации по sed, и все еще нахожусь в тупике в моем конкретном случае использования.
Я хочу заменить эту строку в файле conf моей собственной строкой:
Заменить эту строку:
#maxmemory <bytes>с:
максимальная память 26 ГБ
Вот что я попробовал:
sed s / maxmemory. * байт. * / maxmemory 26 ГБ / /etc/redis/redis.conf
Я получаю ошибку:
sed: -e выражение # 1, char 30: неопределенная команда `s '
Что меня озадачивает, потому что я не знаю, что это значит. Итак, мой вопрос:
Как я могу выполнить то, что я хочу? Что означает эта ошибка? (чтобы я мог учиться на этом)
/
, например,@
или|
. Смотрите здесь: stackoverflow.com/a/9366940/4561887 и здесь: unix.stackexchange.com/a/259087/114401 .В самом деле
Ошибка означает, что при отсутствии кавычек ваша оболочка использует пробелы для разделения аргументов. Пространство между
maxmemory
и26gb
, таким образом, рассматривается как завершающий первый аргумент, который, таким образом, не имеет терминала,/
когда онsed
анализирует этот аргумент как одну из его команд.Помещение вашего регулярного выражения в одинарные кавычки, чтобы ваша оболочка не разделяла его на несколько аргументов и передавала его
sed
как один единственный аргумент, решает проблему:пока
работает.
Надеюсь, это поможет.
источник
sed
то, что делает это. Это оболочка, которая делает это.Ваш вариант использования будет решен этой командой.
источник