Bash 调整AWK sub语句以替换任意字符组合的两个字符串之间的值
测试数据Bash 调整AWK sub语句以替换任意字符组合的两个字符串之间的值,bash,awk,Bash,Awk,测试数据 Test Data 1: <stringProp name="ThreadGroup.duration">1</stringProp> Test Data 2: <stringProp name="ThreadGroup.duration">$$fred7723!</stringProp> 测试数据1:1 测试数据2:$$fred7723! 期望的变化: Test Data 1: <stringProp name="Thre
Test Data 1: <stringProp name="ThreadGroup.duration">1</stringProp>
Test Data 2: <stringProp name="ThreadGroup.duration">$$fred7723!</stringProp>
测试数据1:1
测试数据2:$$fred7723!
期望的变化:
Test Data 1: <stringProp name="ThreadGroup.duration">99</stringProp>
Test Data 2: <stringProp name="ThreadGroup.duration">99</stringProp>
测试数据1:99
测试数据2:99
以下代码成功地更新了测试数据1。
我如何调整代码以获得测试数据2所需的输出
在测试数据2中,被替换的字符串可以是数字、字母、特殊字符和/或字符的任意组合
overrides_duration=99
overRides=$(awk -v newValue="$overrides_duration" '$0 ~ /stringProp name="ThreadGroup.duration"/ {a=$0; sub(/<stringProp name="ThreadGroup.duration">[0-9]+/,"<stringProp name=\"ThreadGroup.duration\">"newValue,a); print a; next;}{}1' "${testDataLocation}");
overrides\u duration=99
覆盖=$(awk-v newValue=“$overRides_duration”'$0~/stringProp name=“ThreadGroup.duration”/{a=$0;sub(/[0-9]+/,”“newValue,a);打印a;下一步;}{}1'${testDataLocation});
一个简单的sed可以处理这个问题:
sed 's/>[^<]*/>99/' file
Test Data 1: <stringProp name="ThreadGroup.duration">99</stringProp>
Test Data 2: <stringProp name="ThreadGroup.duration">99</stringProp>
sed的/>[^99/”文件
测试数据1:99
测试数据2:99
如果您想使用类似但更简单的awk
$ awk -v newvalue=99 -v k='stringProp name="ThreadGroup.duration">' \
'sub(k "[^<]*<",k newvalue "<")' file
Test Data 1: <stringProp name="ThreadGroup.duration">99</stringProp>
Test Data 2: <stringProp name="ThreadGroup.duration">99</stringProp>
$awk-v newvalue=99-v k='stringProp name=“ThreadGroup.duration”>'\
“sub(k)[^测试数据2中的字符串是否可以包含