所以我有这个字符串
mumbleserver_用户名:“BOT”,
我想将 BOT 更改为某个随机的东西,而不记住之前是什么,所以无需查找和替换。
有人能帮我吗 ?
答案1
虽然几乎肯定可以通过从/dev/random
(或/dev/urandom
) 中提取可打印字节来破解某些东西,但perl
似乎提供了至少一个模块可以完全满足您的要求:
NAME String::Random - Perl module to generate random strings based on a pattern
该模块在 Ubuntu 中由软件包提供libstring-random-perl
,您可以通过您喜欢的软件包管理器安装,或者从命令行使用sudo apt install libstring-random-perl
或 安装sudo apt-get install libstring-random-perl
。
根据CPAN - 字符串::随机页面上,你可以执行以下操作:
perl -MString::Random=random_string -pe '
s/\".*\"/sprintf "\"%s\"", random_string("CccnCccn")/e if /mumbleserver_username:/
' yourfile
用由预定义的大写字母、小写字母和数字组合组成的 8 个字符的随机字符串替换\".*\"
行中文字双引号之间的字符串。mumbleserver_username:
C
c
n
测试:
$ cat file.txt
mumbleserver_username: "BOT",
mumbleserver_username: "foobar",
mumbleserver_username: "NOT",
然后
$ perl -MString::Random=random_string -pe '
s/\".*\"/sprintf "\"%s\"", random_string("CccnCccn")/e if /mumbleserver_username:/
' file.txt
mumbleserver_username: "Wzk1Ihr2",
mumbleserver_username: "Los8Nuz7",
mumbleserver_username: "Sdf8Qmd9",
要将单行代码转换为脚本,可以使用-MO=Deparse
此处描述的技巧:如何将 Perl 单行代码转换成完整的脚本?然后将其输出粘贴到文件中,并附上适当的“shebang”行,如下所示
#!/usr/bin/perl
use String::Random (split(/,/, 'random_string', 0));
LINE: while (defined($_ = <ARGV>)) {
s/\".*\"/sprintf '"%s"', random_string('CccnCccn');/e if /mumbleserver_username:/;
}
continue {
die "-p destination: $!\n" unless print $_;
}
使其可执行
chmod +x myscript.pl
然后你可以像这样使用它
./myscript.pl yourfile