perl oneliner - генератор случайных строк с небуквенно-цифровыми символами

awk '
  NR == FNR {a[$1] = $0; next} 
  ($1 in a) {print; print a[$1]}
' File1 File2
1.1.1.7 Ensure mounting of udf filesystems is disabled
1.1.1.7 mounting of udf filesystems is disabled Fail
1.1.1.8 Ensure mounting of FAT filesystems is disabled
1.1.1.8 mounting of FAT filesystems is disabled  Fail

Если вы хотите выполнить простой тест на наличие -не совпадающих записей в файле 2

awk 'NR==FNR {a[$1]=$0; next} !($1 in a)' File1 File2
1.1.3 Ensure nodev option set on /tmp partition
1.1.4 Ensure nosuid option set on /tmp partition

и наоборот -не совпадающие записи в файле 1

awk 'NR==FNR {a[$1]=$0; next} !($1 in a)' File2 File1
1.1.5 noexec option set on /tmp partition   Fail
1.1.17 noexec option set on /dev/shm partition  Fail
1.1.21 sticky bit is set on all world-writable directories  Fail
1.3.1 AIDE is installed Fail

(printявляется неявным ).

0
06.03.2018, 20:46
3 ответа

Utilice la función chr :

perl -le 'print map chr 33 + rand 94, 1.. 1000'
3
28.01.2020, 02:18

Dado que en este comentario solicitó una forma de agregar caracteres personalizados, una forma de hacerlo es simplemente agregarlos a la lista con qw//, solo recuerde actualizar el conteo en rand 67.

perl -le 'print map { (a..z,A..Z,0..9,qw{- _ / & ?})[rand 67] } 0..100'
1
28.01.2020, 02:18

Suponiendo que se trata de algo más que un simple -desafío de trazador de líneas con el que está lidiando, y desea aprender más, hay maneras de hacer que esto sea un poco más fácil de desarrollar y mantener. (espera, ¡¿acabo de usar esas palabras sobre un transatlántico de Perl -?!)

Odio tener que contar caracteres y actualizar cuando cambio cosas. A menos que esté comprometido con que solo sea una única línea de Perl, le sugiero que primero cree la lista y luego la use, lo que significa que puede )usar alguna otra forma de construir la lista de caracteres, y b )preguntarle cuánto tiempo es posterior.

Me gustan los juegos de caracteres útiles que ofrecen las expresiones regulares, que le permiten representar grupos de caracteres relacionados (si eso es significativo para su caso de uso ), por lo que un enfoque algo más generalizado que yo tomaría es:

Cree la lista de caracteres (usando su ejemplo y agregando "!" y "-" como se menciona en su comentario ). Lo que esto hace es generar todos los caracteres ASCII de 7 -bits (hasta 127 ), luego mantiene solo lo que coincide con la clase de caracteres:

@chars = grep /[a-zA-Z0-9!-]/, map chr, 0..127

Luego emita una secuencia aleatoria de ellos ("rand @chars" fuerza a "@chars" en un contexto numérico, y le da la longitud basada en 0 -de la matriz):

print map { $chars[rand @chars] } 0..pop

Póngalos juntos y se ve así:

perl -le '@chars = grep /[a-zA-Z0-9!-]/, map chr, 0..127;print map { $chars[rand @chars] } 0..pop' 100

Simplemente puede agregar cada carácter explícitamente a la clase (tenga cuidado de escapar de las cosas que lo necesitan :p. Solo no escapé del guión porque está al final)

Lea parte o toda la documentación de perlrecharclass para obtener información adicional.

En mi ejemplo, solo subí a "127" porque parecía que solo estaba interesado en cosas básicas de ASCII de 7 -bits.

Si estás interesado en cosas más esotéricas, tendrás que buscar números más grandes. Para un poco de diversión numérica -, prueba:

@chars = grep /\p{Numeric_Type=Digit}/, map chr, 0..65535
0
28.01.2020, 02:18

Теги

Похожие вопросы