0

我正在自动构建一个包。自动化脚本需要获取要构建的包的版本。我需要获取python脚本main.py的字符串。它在第 15 行说

VERSION="0.2.0.4" #DO NOT MOVE THIS LINE

我需要0.2.0.4,以后很容易变成0.10.3.15左右,所以sed命令不能有固定长度。我在stackoverflow上找到了这个:

sed -n '15s/.*\#\([0-9]*\)\/.*/\1/p'

“这会抑制除第二行之外的所有内容,然后回显 # 和 / 之间的数字”

这不起作用(已调整)。最后一个“/”是哪个?如何将输出保存到名为“版本”的变量中?

version = sed -n ... 

抛出错误

命令 -n 未找到

4

4 回答 4

4

如果你只需要版本号。

awk -F\" 'NR==15 {print $2}' main.py

这将打印"第 15 行之间的所有内容。像0.2.0.4

于 2013-09-24T10:28:38.870 回答
1

awk

$ awk -F= 'NR==15 {gsub("\"","",$2); print $2}' main.py
0.2.0.4

解释

  • NR==15在第 15 行执行操作。
  • -F=将字段分隔符定义为=.
  • {gsub("\"","",$2); print $2}删除"第二个字段上的字符并打印它。

更新

更具体地说,该行是 version="0.2.0.4" #DO NOT MOVE THIS LINE

$ awk -F[=#] 'NR==15 {gsub("\"","",$2); print $2}' main.py
0.2.0.4 

使用多个字段分隔符-F[=#],这意味着它可以是#=

要将其保存到您的version变量中,请使用如下表达式var=$(command)

version=$(awk -F[=#] 'NR==15 {gsub("\"","",$2); print $2}' main.py)
于 2013-09-24T10:18:11.137 回答
1

尝试:

sed -n '15s/[^"]*"\(.*\)".*/\1/p' inputfile

为了将其分配给变量,请说:

VARIABLE=$(sed -n '15s/[^"]*"\(.*\)".*/\1/p' inputfile)

为了消除VERSION仅在第 15 行出现的依赖关系,您可以说:

sed -n '/^VERSION=/ s/[^"]*"\(.*\)".*/\1/p' inputfile
于 2013-09-24T10:24:57.460 回答
0

分配变量不应该有空格

version=$(your code)

version=$(sed -r -i '15s/.*\"\([0-9]*\)\/.*/"/p' main.py)

或者

version=`sed -r -i '15s/.*\"\([0-9]*\)\/.*/"/p' main.py`
于 2013-09-24T10:14:31.680 回答