簡體   English   中英

使用awk或sed替換xml文件中的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM