SED: Ищите алфавитно-цифровую строку и замените ее

Я должен искать и заменить алфавитно-цифровую строку с помощью SED.

Строка поиска: Test:rXXXXX, где XXXXX всегда будут 5 чисел цифры

Строка замены: Test:rYYYYY, где YYYYY всегда будет 5 числами цифры

Я придумал следующее:

echo 'Test:r12345' | sed 's/Test:r[0-9][0-9][0-9][0-9][0-9]$/Test:rYYYYY/g'

Это в настоящее время работает.

Существует ли лучший способ достигнуть этого? Я не хочу использовать' [0-9]' 5 раз в выражении

1
задан 24.04.2011, 00:02

3 ответа

Просто другой с sed с маленькой модификацией для соответствия подвыражению "Test:r", делающему немного более краткую замену

echo 'Test:r12345' | sed 's/\(Test:r\)[0-9]\{5\}/\1YYYYY/g'
1
ответ дан 12.12.2019, 10:34

Используйте этот синтаксис вместо этого:

[0-9]{5}

Это требует, чтобы Вы передали '-r' sed, таким образом, новый пример будет:

echo 'Test:r12345' | sed -r 's/Test:r[0-9]{5}$/Test:rYYYYY/g' 
1
ответ дан 12.12.2019, 10:34

хорошо, на основе Вашего образца, можно просто заменить 2-е полевое использование awk

echo 'Test:r12345' | awk -F":" '{$2="rYYYYY"}1' OFS=":"

Нет никакой потребности создать сложное регулярное выражение. KISS

1
ответ дан 12.12.2019, 10:34

Теги

Похожие вопросы