Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 调整AWK sub语句以替换任意字符组合的两个字符串之间的值_Bash_Awk - Fatal编程技术网

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中的字符串是否可以包含