我有一个正则表达式 MyRegularExpression
,我想用 xxxxxxxxxabc 替换它,其中 a、b、c 是一些随机数。我该怎么做sed
?
答案1
字符串替换很简单。生成随机数是大概有可能,但阅读起来会很可怕,而且几乎不可能维护(只要看一下官方批准的样本剧本)。
我会做类似的事情
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