Bash 如何使用sed、awk或xmlet替换基于XML文件中元素名称的值
我试图将值10替换为值5,其中testname=“TG1” 更改此项:Bash 如何使用sed、awk或xmlet替换基于XML文件中元素名称的值,bash,awk,sed,xmlstarlet,Bash,Awk,Sed,Xmlstarlet,我试图将值10替换为值5,其中testname=“TG1” 更改此项: <stringProp name="ThreadGroup.num_threads">10</stringProp> 10 为此: <stringProp name="ThreadGroup.num_threads">5</stringProp> 5 片段示例 之前: <ThreadGroup guiclass="ThreadGroupGui" testclas
<stringProp name="ThreadGroup.num_threads">10</stringProp>
10
为此:
<stringProp name="ThreadGroup.num_threads">5</stringProp>
5
片段示例
之前:
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="TG1" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">10</stringProp>
</ThreadGroup>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="TG2" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">50</stringProp>
</ThreadGroup>
持续
10
持续
50
之后:
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="TG1" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">5</stringProp>
</ThreadGroup>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="TG2" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">50</stringProp>
</ThreadGroup>
持续
5.
持续
50
尝试此awk命令:
awk '$0 ~ "testclass=\"ThreadGroup\"" && $0 ~ "testname=\"TG1\""{replace=1}
$0 ~ "testclass=\"ThreadGroup\"" && $0 !~ "testname=\"TG1\""{replace=0}
replace{gsub("name=\"ThreadGroup.num_threads\">10</stringProp>",
"name=\"ThreadGroup.num_threads\">5</stringProp>",$0)}1' in.txt
awk'$0~“testclass=\'ThreadGroup\'&&&$0~”testname=\'TG1\'{replace=1}
$0~“testclass=\'ThreadGroup\'&&&$0!~testname=\“TG1\”“{replace=0}
替换{gsub(“name=\”ThreadGroup.num\u threads\”>10“,
.txt中的“name=\”ThreadGroup.num\u threads\>5“,$0)}1”
它将用
name=“ThreadGroup.num\u线程”>5替换所有name=“ThreadGroup.num\u线程”>10个,如果它们在
内,那么假设您实际拥有有效的XML,这确实是一个xpath问题:
xmlstarlet ed \
--update '//ThreadGroup[@testname="TG1"]//stringProp[@name="ThreadGroup.num_threads"]' \
--value 5 \
file.xml
要将文件保存到位,请将ed
更改为ed--inplace
awk'{sub(/10/,“5”)}1'文件
awk '{sub(/10<\/stringProp>/,"5</stringProp>")}1' file
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="TG1" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">5</stringProp>
</ThreadGroup>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="TG2" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">50</stringProp>
</ThreadGroup>
持续
5.
持续
50