Данные испытаний

 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
user1654528 25 Фев 2016 в 20:11

2 ответа

Лучший ответ

Если вы хотите использовать похожий, но более простой 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
karakfa 25 Фев 2016 в 17:27

С этим справляется простой sed:

sed 's/>[^<]*/>99/' file

Test Data 1: <stringProp name="ThreadGroup.duration">99</stringProp>
Test Data 2: <stringProp name="ThreadGroup.duration">99</stringProp>
0
anubhava 25 Фев 2016 в 17:17