sed - команда для сопоставления строки и изменения только числовой части?

У меня есть это как мой целевой файл:

#define NUMTHREADS 4
#define ar 1000
#define ac 1000
#define br 1000
#define bc 1000

Я хочу заменить только числа в этих строках другими числами, используя sed (это скрипт bash). Однако я не хочу изменять эти значения где-либо еще в файле. Сценарий не может знать значения напрямую, поскольку они могут отличаться от перечисленных выше.

Итак, в основном:

Найдите строку с #define ar, затем замените общее числовое совпадение после нее заданным числом. Возможно ли это с помощью sed?


sed
person Joshua Enfield    schedule 06.12.2010    source источник


Ответы (1)


Конечно, в этом смысл регулярных выражений:

sed [-i] 's/^#define ar [0-9]\+$/#define ar 12345/' <file>

Переключатель -i заставляет sed работать с файлом на месте; оставьте его отключенным в первый раз, чтобы он мог печатать на стандартный вывод и убедиться, что он делает то, что вы хотите.

Конечно, судя по вашему первому описанию, вы можете захотеть сопоставить больше, чем просто #define ar. Чтобы соответствовать всем двухбуквенным #define:

sed [-i] 's/^\(#define [a-z]\{2\}\) [0-9]\+$/\1 12345/`

\1 заменяется тем, что соответствовало группе \(...\).

person Cascabel    schedule 06.12.2010