12

Я читаю много документации на sed, и все еще нахожусь в тупике на моем конкретном случае использования.

Я хочу заменить эту строку в файле conf моей собственной строкой:

Заменить эту строку:

#maxmemory <bytes>
с:
maxmemory 26gb

Вот что я попробовал:

sed s/maxmemory.*bytes.*/maxmemory 26gb/ /etc/redis/redis.conf

Я получаю ошибку:

sed: -e expression #1, char 30: unterminated `s' command

Что меня озадачивает, потому что я не знаю, что это значит. Итак, мой вопрос:

Как я могу выполнить то, что я хочу? Что означает эта ошибка? (чтобы я мог учиться на этом)

2 ответа2

17

Вы забыли -i. Модификация должна быть сделана на месте:

$ sed -i 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt

8

В самом деле

Ошибка означает, что при отсутствии кавычек ваша оболочка использует пробелы для разделения аргументов. Таким образом, пробел между maxmemory и 26gb считается завершающим первый аргумент, в котором, таким образом, отсутствует терминал / когда sed анализирует этот аргумент как одну из своих команд.

Положив регулярное выражение одинарных кавычек, чтобы оболочка не разбить его на несколько аргументов , и руки его sed в качестве одного аргумента, решает эту проблему:

$ sed s/maxmemory.*/maxmemory 26gb/ /some/file/some/where.txt
sed: -e expression n°1, caractère 23: commande `s' inachevée

в то время как

$ sed 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt

работает.

Надеюсь, это поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .