Использование подстановочных знаков в sed - PullRequest
2 голосов
/ 08 марта 2012

Следующая команда работает должным образом и показывает количество баз данных в файле redis.conf.Что мне нужно сделать, это изменить его на 32 и сохранить его обратно в тот же файл с помощью одной команды.

# grep ^databases redis.conf | awk '{print $2}'
16

Следующая команда работает, только если число равно 16. Как изменить неизвестное числодо 32?

sed -i 's/databases\ 16/databases\ 32/' redis.conf

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Вы можете использовать [0-9]* или \d или соответствующий класс символов POSIX ([:digit:]). Вот так:

sed -i 's/databases\ [0-9]*/databases\ 32/' redis.conf

Примечание: \d может потребоваться или не потребоваться дополнительная обратная косая черта из-за экранирования оболочки. Также обратите внимание: существуют различные варианты sedawk).

Для максимальной мобильности я думаю [0-9] и [:digit:] - лучший выбор. Чтобы было определенное количество повторений, повторите выражение.

1 голос
/ 08 марта 2012

Может ли быть гарантированно только две цифры?

sed -i 's/^databases [0-9][0-9]/databases 32/' redis.conf
...