替换文件行

时间:2011-09-19 17:56:46

标签: bash google-chrome-extension

我正在尝试制作版本增量脚本。所以我有一个文件manifest.json,它有预定义的行(例如45行)。

$1参数是文件名
$2参数是新版本号(例如0.3.5.29

输入类似于$ BumpVersion.sh manifest.json 0.15.2.34

我需要替换例如"version": "0.2.0.1","version": "0.2.1.0",

- 编辑 -
哦,我忘了,版本并不总是0.2.1.5,它可以是0.3

我知道行号和行内容,我基本上只需要替换数字。  我在Windows上的Git-Bash中这样做,如果可能的话,它应该在Linux和Unix上运行。

(我从未使用过bash脚本,但我需要它用于跨平台支持)

2 个答案:

答案 0 :(得分:2)

应该是一个简单的sed脚本。 (我假设你的报价是必需的):

file="VERSION.json"
new_version="0.2.1.0"
sed -i "s/\"version:\" \"[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\"/\"version:\" \"$new_version\"/" $file

但是,我不喜欢这个。相反,您应该有一个模板,并通过替换像%VERSION%这样的已知字符串来重写模板。例如,您有一个名为 VERSION.json.template 的文件:

file="version.json.template"
new_version="1.2.2.1"
sed "s/%VERSION%/$new_version/" > "${file%.template}"

实施起来更简洁,更简单。

${file%.template}从文件名中删除.template后缀。如果您正在使用版本控制系统,则不会在每次编译时保存version.json文件的新版本。相反,您只需将其作为标准构建例程的一部分,该例程应包含 clean 机制以删除不需要的version.json文件。

如果您使用像Ant这样的构建系统,您可以使用其各种任务(如复制/过滤任务)来构建并将此文件复制到您的网页的其他位置。

答案 1 :(得分:0)

您的BumpVersion.sh脚本可能如下所示

#!/bin/sh
sed -i "/\(\"version\":\).*/\1 \"$2\"/" "$1"