У меня есть регулярное выражение MyRegularExpression , и я хочу заменить его на xxxxxxxxxabc с a, b, c - случайное число. Как я могу сделать это с помощью sed ?

1 ответ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

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