[英]Replacing a value in xml file using awk or sed
我想,以取代的價值"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
您可以在字符串之間放置變量
's:..text...'$Ratio'...text..:'
它將全部連接在一個字符串中-但是字符串和$Ratio
之間不能有空格
sed -i 's:<stringProp name="ThreadGroup.num_threads">2000</stringProp>:<stringProp name="ThreadGroup.num_threads">'$Ratio'</stringProp>:' $file
如果沒有其他num_threads
則可以使用較短的字符串
sed -i 's:num_threads">2000<:num_threads">'$Ratio'<:' $file
使用()
(或在某些系統上使用\\( \\)
),您可以捕獲輸入字符串中的文本並將其用作輸出字符串中的$1
, $2
sed -i 's:(num_threads">)2000(<):$1'$Ratio'$2:' $file
這樣,即使是較長的版本,也可以創建較短的字符串
sed -i 's:(<stringProp name="ThreadGroup.num_threads">)2000(</stringProp>):$1'$Ratio'$2:' $file
在Linux Mint上,我必須使用\\( \\)
而不是()
,
sed -i 's:\(num_threads">\)2000\(<\):$1'$Ratio'$2:' $file
或者我必須添加選項-E
或--regexp-extended
sed -i -E 's:(num_threads">)2000(<):$1'$Ratio'$2:' $file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.