将浮点数替换为行中的数字

时间:2019-05-16 12:56:24

标签: regex bash unix sed

我想在两行中增加配置文件中的版本号,如下所示:

version:
  abc01: 1.13.0
  abc02: 1.13.0

为此,我尝试使用sed命令-匹配abc01abc02,然后将其替换为abc0X 1.14.0,但我认为这不是理想的解决方案,它缺少TAB。

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

3 个答案:

答案 0 :(得分:1)

如果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

答案 1 :(得分:1)

使用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 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

答案 2 :(得分:0)

尝试一下:

sed -E 's/(abc0.: 1\.1)./\14/' config.yaml