【发布时间】:2015-01-29 00:04:05
【问题描述】:
为了简单起见,假设我有一个文件(请原谅我无用的伪代码)
文件.txt
std::string filename = "filename.txt"
double v_no = 2.0;
const int v_minor = 0; // < --- Target
std::string random_var1 = "Hello"
std::string random_var2 = "Hello 2"
int main()
{
// ..
}
我在同一目录中有一个 bash 文件 - set_version.sh
我想用这个脚本替换这个文件中的一个字符串——特别是用“v_minor = $VARIABLE”替换“v_minor = 0”——在我的例子中,变量将是服务器上的一个环境集。
可以说它已经成功运行了几次。现在字符串显示为“v_minor = 2”。我仍然希望相同的 set_version.sh 脚本将 2 更改为变量。
在我的软件的 Windows 版本中,我有一个将“v_minor = %d”更改为“v_minor = %VERSION%”的批处理文件。
我的问题是我如何在 bash 中做类似的事情?例如。忽略字符串中的小数点并将其更改为变量。
到目前为止我得到了什么:
set_version.sh
#!/bin/bash
VERSION=75
sed -i '' 's/v_minor = %d/v_minor = $VERSION/g/' file.txt
设置的版本 var 仅用于测试目的。
这会返回错误
sed: 1: "s/v_minor = %d/v_minor ...": bad flag in substitute command: '/'
我正在为这个测试运行 Mac OS X Yosemite。
同样,本质上 %d 可以是任何整数。
谢谢
【问题讨论】:
-
只是为了确认,
%d不会匹配“任何整数”,你需要使用[[:digit:]][[:digit:]]*。祝你好运。