2016-02-25 36 views
0

測試數據調整的AWK子語句來代替兩個字符串之間的值字符的任意組合

Test Data 1: <stringProp name="ThreadGroup.duration">1</stringProp> 
Test Data 2: <stringProp name="ThreadGroup.duration">$$fred7723!</stringProp> 

預期變化:

Test Data 1: <stringProp name="ThreadGroup.duration">99</stringProp> 
Test Data 2: <stringProp name="ThreadGroup.duration">99</stringProp> 

這下面的代碼成功更新測試數據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}"); 
+0

在測試數據2串可以包括'<'例如內部引號或逃脫或任何其他方式? –

回答

0

但更簡單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> 
0

一個簡單的sed做處理這個問題:

如果你想使用類似
sed 's/>[^<]*/>99/' file 

Test Data 1: <stringProp name="ThreadGroup.duration">99</stringProp> 
Test Data 2: <stringProp name="ThreadGroup.duration">99</stringProp> 
相關問題