如何使用sed或awk将URL指定GET参数值替换为随机数
实现方案
方法1:使用awk(更推荐)
awk原生支持随机数生成,不需要依赖额外工具,处理效率更高,命令如下:
# 输出处理后的结果到终端 awk 'BEGIN{srand()} {sub(/param1=[^&]*/, "param1=" int(rand()*10000000000))}1' 你的URL文件名
参数说明:
BEGIN{srand()}:初始化随机种子,保证每次运行生成的随机数序列不同sub(/param1=[^&]*/, ...):正则匹配param1=开头到下一个&之前的所有字符(即param1的参数值),替换为param1=加上10位随机整数,调整rand()后乘的数值可修改随机数长度- 末尾的
1是awk固定写法,等价于输出所有处理后的行
如果需要直接修改原文件,gawk 4.1及以上版本支持原地修改参数:
awk -i inplace 'BEGIN{srand()} {sub(/param1=[^&]*/, "param1=" int(rand()*10000000000))}1' 你的URL文件名
低版本awk可通过临时文件实现原地修改:
awk 'BEGIN{srand()} {sub(/param1=[^&]*/, "param1=" int(rand()*10000000000))}1' 你的URL文件名 > tmp && mv tmp 你的URL文件名
方法2:使用sed(需结合bash内置随机数)
sed本身无随机数生成能力,可配合bash循环实现需求,命令如下:
while IFS= read -r line; do rand=$((RANDOM * RANDOM)) echo "$line" | sed "s/param1=[^&]*/param1=$rand/" done < 你的URL文件名
参数说明:
RANDOM是bash内置变量,取值范围为0~32767,两个相乘可得到更大范围的随机值- 逐行读取URL文件,每行生成一个新的随机数后执行替换逻辑
- 需要原地修改的话,在循环末尾增加
> tmp && mv tmp 你的URL文件名即可
规则适配说明
上述两种方案的替换逻辑通用,只需将正则中的param1替换为你需要修改的任意GET参数名即可,无论参数位于URL参数段的开头、中间、末尾都可以正确匹配替换。
内容的提问来源于stack exchange,提问作者sanNeck
相关产品推荐
相关产品推荐

