1

Мне нужно найти и заменить буквенно-цифровую строку с помощью SED.

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

Заменить строку: Test:rYYYYY , где YYYYY всегда будет пятизначным числом

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

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

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

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

3 ответа3

1

Просто еще один с sed с небольшой модификацией, соответствующей подвыражению «Test:r», что делает замену более краткой.

echo 'Test:r12345' | sed 's/\(Test:r\)[0-9]\{5\}/\1YYYYY/g'
1

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

[0-9]{5}

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

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

ну, исходя из вашего примера, вы можете просто заменить 2-е поле с помощью awk

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

Нет необходимости создавать сложные регулярные выражения. ПОЦЕЛУЙ

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .