在Shell中有没有办法将一个值替换到regex模式中?

7vhp5slm  于 2023-01-02  发布在  Shell
关注(0)|答案(1)|浏览(98)

我正在编写一个Python脚本,用来将某种格式的XML文件转换为JSON格式。这个练习来自麻省理工学院缺失的一个学期。(xml_to_json
我遇到了一个关于如何在shell中替换regex模式中的值的问题。(我正在使用python中的子进程库来访问shell sed程序)
我使用了Python库“subprocess”,并按如下所示进行了操作。

# xml_to_json.py

num = 1001(or it could be other numbers)

subprocess.call(["sed","-E","-i","","${num}s/,$//","example-data.xml"])

我尝试做的是使用变量“num”,将值替换到此位置(${num}),以便可以替换为特定行号。
我知道你可以像这样在shell中使用变量($variable),但是它在这里似乎不起作用。
我知道我可以定义一个行号的范围,在其中我想做'sed'工作,如“%1,100 s/regexpattern/regex/"。
如何使用变量将行号放在's'前面?

zwghvu4y

zwghvu4y1#

num不是shell变量,而是python变量,只需在python中构建参数字符串,使其包含正确的值:

subprocess.call(["sed","-E","-i","", str(num) + "s/,$//","example-data.xml"])

或使用f弦:

subprocess.call(["sed","-E","-i","", f'{num}s/,$//',"example-data.xml"])

注意,不小心将值插入shell命令可能会导致命令注入,在这种情况下似乎是安全的,因为num是一个简单的数值,而不是用户提供的数据。

相关问题