regex - txt - afinar los argumentos de entrada bash en la expresión regular de egrep
grep varios patrones (1)
aquí está el script que estoy tratando de ejecutar
#!/bin/bash
charlist=$1 #possible input:cat
wordlength=$2 #possible input: 3
cat ./nounlist | egrep /b[${charlist}]/b{${wordlength}}
salida: nada. # debería haber capturado lo siguiente (usando la línea de comando)
$ cat nounlist | egrep "/b[cat]{3}/b"
act
cat''s_cradle
cat
cat-o''-nine-tails
cat''s-paw
Sno-cat
act
act
act
act
rat-a-tat-tat
cat
cat''s-claw
cat''s_foot
cat''s-ear
cat''s-tail
cat''s-ear
cat''s_eye
Básicamente, estoy tratando de escribir un guión que tome dos argumentos (lista de palabras, longitud de palabra) y busque todas las palabras en la lista de nominales que consisten en el carácter en la lista de palabras y tiene la longitud de la variable de longitud de palabra. Lo que quiero saber es cómo poner las variables bash en la expresión regular de egrep como cadenas.
¡Gracias!
Debe envolver el argumento entre comillas dobles para que Bash no intente manejar las barras diagonales inversas, y mueva el segundo /b
a después de {${wordlength}}
:
cat ./nounlist | egrep "/b[${charlist}]{${wordlength}}/b"
(Si ejecuta echo /b
, verá que simplemente imprime b
. Esto es porque Bash asume que el /
está ahí para evitar que b
tenga algún significado especial, por lo que lo elimina).