У меня есть регулярное выражение MyRegularExpression
, и я хочу заменить его на xxxxxxxxxabc с a, b, c - случайное число. Как я могу сделать это с помощью sed
?
1 ответ
0
Замена строки проста. Генерация случайных чисел, вероятно, возможна, но будет ужасна для чтения и практически невозможна для обслуживания (просто взгляните на некоторые официально разрешенные примеры сценариев).
Я бы сделал что-то вроде
replacement="xxxxx$(printf "%05d" $RANDOM | cut -c 3-5)"
sed 's/MyRegularExpression/'"$replacement/"
Это немного уродливый беспорядок в кавычках, но, вероятно, лучше избегать всех специальных символов в регулярном выражении, которые будут затронуты использованием двойных кавычек для всего тела sed.
Обновление на основе вашего комментария:
perl -pe 's{my_regex}{ sprintf "xxxxx%03d", int(1000*rand()) }ge' file
Пример:
$ cat sample.py
def f1(a,b,c):
x = a + b + c
return x
def f2(a,b):
x = a + b
return x
$ perl -pe 's{def|return}{ sprintf "%s%03d", uc($&), int(1000*rand()) }ge' sample.py
DEF905 f1(a,b,c):
x = a + b + c
RETURN771 x
DEF146 f2(a,b):
x = a + b
RETURN199 x