【发布时间】:2020-01-17 16:43:36
【问题描述】:
我想将"ThreadGroup.num_threads"(即2000)的值替换为另一个值,即500。我的文件名是“test.xml”
这是我想用500 替换2000 值的xml 文件:
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="JWT-API Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">1</stringProp> </elementProp>
<stringProp name="ThreadGroup.num_threads">2000</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
我制作了一个有助于替换值的脚本,但不知何故,我对值进行了硬编码,并对路径位置进行了硬编码。我需要一种方法,以便它识别位置本身,就像我在 awk 命令中定义的那样,并使用定义的参数替换值 $Ratio
#!/bin/bash
Ratio="500"
for file in Sample.jmx; do
awk -F"[<>]" '/ThreadGroup.num_threads/{print $3}' $file > output.json
sed -i 's:<stringProp name="ThreadGroup.num_threads">2000</stringProp>:<stringProp name="ThreadGroup.num_threads">500</stringProp>:' $file
done
Output=$((`cat < output.json`))
echo $Output
#UpScale = number_of_threads / 1000
UpScale=$((`cat < output.json` / $Ratio))
echo $UpScale
【问题讨论】:
-
Don't Parse XML/HTML With Regex. 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
-
所以将
<stringProp name="ThreadGroup.num_threads">2000</stringProp>替换为<stringProp name="ThreadGroup.num_threads">500</stringProp>。有什么困难? -
有什么问题吗?你的代码在哪里?这不是代码编写服务。如果你表明你已经做了一些尝试,人们会愿意提供帮助。
-
我已经编辑了帖子并完成了我的工作,但不知何故我想摆脱我工作的所有硬编码的东西
-
你可以使用
's:..text...'$Ratio'...text..:'创建字符串