Bash AWK替换XML中的字符串值

Bash AWK替换XML中的字符串值,bash,unix,awk,sed,Bash,Unix,Awk,Sed,在文件Test1.jmx中,我需要将字符串值替换为false,其中值=true或0或null。我需要对文件中所有出现的字符串执行此操作 before: <boolProp name="ThreadGroup.scheduler">true</boolProp> after: <boolProp name="ThreadGroup.scheduler">false</boolProp> 之前: 真的 之后: 假的 这是我的错误代码: overri

在文件Test1.jmx中,我需要将字符串值替换为false,其中值=true或0或null。我需要对文件中所有出现的字符串执行此操作

before:
<boolProp name="ThreadGroup.scheduler">true</boolProp>
after:
<boolProp name="ThreadGroup.scheduler">false</boolProp>
之前:
真的
之后:
假的
这是我的错误代码:

overrides_scheduler="BLAAA FOO MOO"
overRides=$(awk -v newValue="$overrides_scheduler" '$0 ~ /boolProp name="ThreadGroup.scheduler"/ {a=$0; sub(/<boolProp name="ThreadGroup.scheduler">[a-zA-Z0-9]/,"<boolProp name=\"ThreadGroup.scheduler\">"newValue,a); print a; next;}{}1' "Test1.jmx");
echo  "$overRides" > "Test1.jmx"
overrides_scheduler=“BLAAA FOO MOO”
overRides=$(awk-v newValue=“$overRides_scheduler”'$0~/boolProp name=“ThreadGroup.scheduler”/{a=$0;sub(/[a-zA-Z0-9]/,”“newValue,a);打印a;下一步;}{}1'“Test1.jmx”);
echo“$overRides”>“Test1.jmx”
Test1.jmx:

<boolProp name="ThreadGroup.scheduler">true</boolProp>
<longProp name="ThreadGroup.end_time">1363247040000</longProp>
<longProp name="ThreadGroup.end_time">1363247040000</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<longProp name="ThreadGroup.end_time">1363247040000</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<boolProp name="ThreadGroup.scheduler"></boolProp>
<longProp name="ThreadGroup.end_time">1363247040000</longProp>
<boolProp name="ThreadGroup.scheduler">0</boolProp>
true
1363247040000
1363247040000
真的
1363247040000
真的
1363247040000
0
使用GNU时:

sed -r 's|(<boolProp name="ThreadGroup.scheduler">)(true\|0\|null)(</boolProp>)|\1false\3|' Test1.jmx
sed-r的|()
输出:

<boolProp name="ThreadGroup.scheduler">false</boolProp>
<longProp name="ThreadGroup.end_time">1363247040000</longProp>
<longProp name="ThreadGroup.end_time">1363247040000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<longProp name="ThreadGroup.end_time">1363247040000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<boolProp name="ThreadGroup.scheduler"></boolProp>
<longProp name="ThreadGroup.end_time">1363247040000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
false
1363247040000
1363247040000
假的
1363247040000
假的
1363247040000
假的

我设法做到了以下几点:

echo '<boolProp name="ThreadGroup.scheduler">true</boolProp>' | awk -F'\">|</' '/ThreadedGroup.scheduler/ {sub(/true/,"false");print}'

echo'true'| awk-F'\“>”谢谢。它工作得非常好。但是,空值的意思是表示没有任何值,而不是null这个词。你知道我如何调整语句以便在没有值的地方替换false吗?@user1654528:从我的答案中删除字符串
null