我正在自动构建一个包。自动脚本需要获取要构建的包的版本。 我需要获取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”的变量中?
version = sed -n ...
抛出错误
命令-n not found
答案 0 :(得分:4)
如果您只需要版本号。
awk -F\" 'NR==15 {print $2}' main.py
这会打印第15行"
之间的所有内容。例如0.2.0.4
答案 1 :(得分:1)
使用awk
:
$ awk -F= 'NR==15 {gsub("\"","",$2); print $2}' main.py
0.2.0.4
NR==15
对第15行执行操作。-F=
将字段分隔符定义为=
。{gsub("\"","",$2); print $2}
删除第二个字段上的"
字符并将其打印出来。更具体地说,该行是版本=“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)
答案 2 :(得分:1)
尝试:
sed -n '15s/[^"]*"\(.*\)".*/\1/p' inputfile
为了将其分配给变量,请说:
VARIABLE=$(sed -n '15s/[^"]*"\(.*\)".*/\1/p' inputfile)
为了消除仅在第15行发生VERSION
的依赖关系,您可以说:
sed -n '/^VERSION=/ s/[^"]*"\(.*\)".*/\1/p' inputfile
答案 3 :(得分:0)
分配变量时不应有空格
version=$(your code)
version=$(sed -r -i '15s/.*\"\([0-9]*\)\/.*/"/p' main.py)
OR
version=`sed -r -i '15s/.*\"\([0-9]*\)\/.*/"/p' main.py`