Как заменить строку в файле рисунком с помощью sed?


27

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

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

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

#maxmemory <bytes>
с:
максимальная память 26 ГБ

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

sed s / maxmemory. * байт. * / maxmemory 26 ГБ / /etc/redis/redis.conf

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

sed: -e выражение # 1, char 30: неопределенная команда `s '

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

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

Ответы:


27

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

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


И если у вас есть косые черты в строках, вы должны использовать другой символ разделителя вместо /, например, @или |. Смотрите здесь: stackoverflow.com/a/9366940/4561887 и здесь: unix.stackexchange.com/a/259087/114401 .
Габриэль Стейплс

11

В самом деле

Ошибка означает, что при отсутствии кавычек ваша оболочка использует пробелы для разделения аргументов. Пространство между 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

работает.

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


1
Это не sedто, что делает это. Это оболочка, которая делает это.
JdeBP

Вы правы, конечно, спасибо за голову :)
Sxilderik

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.