从终端更改文件中的字符串

从终端更改文件中的字符串

所以我有这个字符串

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:Ccn

测试:

$ 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

相关内容