Ya encontré el problema: después de 'port' viene un número, y luego nada -acaba la línea-. En cambio, en la expresión regular tienes puesto que después del número debe existir un espacio en blanco. Y claro, eso no sucede nunca. Por eso no genera ninguna salida.juancs011 escribiste:En el archivo full.txt se encuentran las palabras 'SIP', 'at' y 'port' en la misma línea y las palabras que están después de 'SIP' y de 'port' tienen las mismas características (5 números) pero 'SIP' tiene comillas y 'port' no las tiene. Yo lo que hice fue colocar la misma instrucción que me extrae el número 'SIP' para que me extraiga el 'port' pero no funciona, me crea el archivo2.txt pero vacío.
La solución es cambiar la expresión regular:
Using perl Syntax Highlighting
- if (/ SIP '(\d+)' at (\S+) port (\d+)/)
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Ahora sí: estamos buscando por conjuntos de dígitos (\d+). Y no hay espacio en blanco detrás.
También puedes abrir una ventana de entrada de línea de comandos, y así poder ejecutar el programa todas las veces que quieras, y puedes ver los mensajes que van saliendo con los print() (en caso de que tengas print() hacia la salida estándar).juancs011 escribiste:Yo utilizo Notepad como editor y para ejecutar el archivo .pl hago doble clic sobre el archivo y allí mismo se crea el nuevo archivo .txt.
Sorpresa... ¿Qué Perl has instalado entonces? Porque Perl no viene de serie con los Windows... (sistema que hace años que ya no uso).juancs011 escribiste:Traté de instalar algo que se llama Strawberry pero por políticas de seguridad de la empresa no lo logré instalar bien.
juancs011 escribiste:Yo quisiera entender finalmente cómo utilizar esos códigos para extraer cadenas de texto. Lo que tu me explicas brevemente se entiende bien, igualmente el archivo que me enviaste, pero al buscar por Internet y tratar de aplicar cambios a lo que me enviaste no logro hacer que funcione.
Yo suelo hacer muchas pruebas en la propia línea de comandos. Arranco una terminal y voy ejecutando perl en el directorio donde tengo el programa y los archivos que quiero procesar.
Por ejemplo, con la siguiente orden salen los 3 campos que queremos:
Using bash Syntax Highlighting
- perl -n -E "/ SIP .(\d+). at (\S+) port (\d+)/ and say \"[\$1][\$2][\$3]\"; " full.txt
- [52001][10.75.4.27][64498]
- [52010][10.75.4.24][26384]
- [21001][10.72.137.20][44110]
- [52003][10.75.4.56][54596]
- [52004][10.75.4.49][6050]
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Using bash Syntax Highlighting
- perl -n -E '/ SIP .(\d+). at (\S+) port (\d+)/ and say "[$1][$2][$3]"; ' full.txt
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Ya te he explicado que los patrones de las expresiones regulares son un lenguaje propio, así que si quieres usarlas, tendrás que aprender ese nuevo lenguaje.