sed - команда для сопоставления строки и изменения только числовой части? - PullRequest
1 голос
/ 07 декабря 2010

В качестве целевого файла у меня есть это:

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

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

Так в основном:

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

1 Ответ

4 голосов
/ 07 декабря 2010

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

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

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

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

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

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

...