Embora seja quase possível hackear algo ao extrair bytes imprimíveis de /dev/random
(ou /dev/urandom
), perl
parece fornecer pelo menos um módulo que faz exatamente o que você deseja:
NAME String::Random - Perl module to generate random strings based on a pattern
O módulo é fornecido no Ubuntu pelo pacote libstring-random-perl
, que você pode instalar através do seu gerenciador de pacotes preferido, ou a partir da linha de comando usando sudo apt install libstring-random-perl
ou sudo apt-get install libstring-random-perl
.
Com base nos exemplos da página CPAN - String :: Random , você poderia então fazer algo como:
perl -MString::Random=random_string -pe '
s/\".*\"/sprintf "\"%s\"", random_string("CccnCccn")/e if /mumbleserver_username:/
' yourfile
para substituir cadeias entre aspas duplas literais \".*\"
nas linhas correspondentes a mumbleserver_username:
por sequências aleatórias de 8 caracteres que consistem em uma combinação predefinida de letras maiúsculas C
, letras minúsculas c
e dígitos n
.
Teste:
$ cat file.txt
mumbleserver_username: "BOT",
mumbleserver_username: "foobar",
mumbleserver_username: "NOT",
então
$ 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",
Para transformar o one-liner em um script, você pode usar o truque -MO=Deparse
descrito aqui: Como posso converter one-liners do Perl? em scripts completos? depois cole sua saída em um arquivo, junto com uma linha 'shebang' apropriada como
#!/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 $_;
}
Torne-o executável
chmod +x myscript.pl
e depois você pode usá-lo como
./myscript.pl yourfile