Заменить число с плавающей точкой в ​​строке - PullRequest
1 голос
/ 16 мая 2019

Я хотел бы увеличить номер версии в конфигурационном файле в обеих строках, который выглядит следующим образом:

version:
  abc01: 1.13.0
  abc02: 1.13.0

Для этого я попытался использовать команду sed - сопоставить abc01 иabc02 и затем замените их на abc0X 1.14.0, но я думаю, что это не идеальное решение, и в нем отсутствовали вкладки.

sed -i -e 's/.*abc01.*$/\abc01 1.14.0/g' config.yaml

Ответы [ 3 ]

1 голос
/ 16 мая 2019

с awk:

awk -v FS='.' -v OFS='.' '/abc/{$2++} {print}' file

или

awk -v FS='.' -v OFS='.' '/abc/{$2++}1' file

или

awk 'BEGIN{FS=OFS="."} /abc/{$2++}1' file

или

awk '/abc/{$2++}1' FS='.' OFS='.'  file

Выход:

version:
  abc01: 1.14.0
  abc02: 1.14.0

См .: 8 Мощные встроенные переменные Awk - FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

1 голос
/ 16 мая 2019

Если abc01 не отображается нигде в вашем вводе, самый простой способ решить эту проблему - избегать сопоставления пробелов перед ним, чтобы оставить его нетронутым:

sed -i -e 's/abc01.*$/abc01 1.14.0/g' config.yaml

Если это не так, то вы можете зафиксировать начало строки в группе захвата, на которую вы ссылаетесь в шаблоне замены:

sed -i -E 's/(.*abc01).*$/\1 1.14.0/g' config.yaml
0 голосов
/ 16 мая 2019

Попробуйте это:

sed -E 's/(abc0.: 1\.1)./\14/' config.yaml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...