
Tengo problemas para ejecutar un script de Perl a través del shell de Unix usando system
el comando de Perl.
Tuve comandos de expresiones regulares más complejos que tuve que ajustar en consecuencia para convertir de Unix a Perl, y están funcionando bien, pero parece que no puedo entender qué falta aquí.
Lo probé con Mobaxterm v7.1 y Putty 0.60.
Tengo un archivo ( file.txt
):
23445 dir1/dir2/dir3
21343 dir1/dir2/dir3/dir4/file.B2
54322 dir1/dir2/dir3/file3.P
53223 dir1/dir2/dir3/dir4/dir5
23412 dir1/dir2/dir3/dir4/dir5/file5.xsd
54166 dir1/dir2/file6.AB
64544 dir1/dir2/fil7.ABE
De este archivo, estoy intentando grep
solo las líneas con archivos (excluir directorios: líneas 1 y 4) y almacenarlas en un archivo nuevo:
system("grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*\$' file.txt > file2.txt");
file2.txt
no cambia file.txt
y todavía contiene los directorios.
Sin embargo, este comando funciona a través del shell de Unix (sin la barra invertida antes de $
):
grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*$' file.txt > file2.txt
file2.txt
producción:
21343 dir1/dir2/dir3/dir4/file.B2
54322 dir1/dir2/dir3/file3.P
23412 dir1/dir2/dir3/dir4/dir5/file5.xsd
54166 dir1/dir2/file6.AB
64544 dir1/dir2/fil7.ABE
Por supuesto , tengo que escapar del $
carácter en el comando del sistema Perl para que Perl no lo lea como una cadena desconocida. Aparte de eso, ¿qué se debe ajustar en el comando del sistema?
Respuesta1
Entre comillas dobles, debe colocar barras invertidas, es decir, duplicar la barra invertida antes del punto.
system("grep '^.*\\.[a-zA-Z0-9][a-zA-Z0-9]*\$' file.txt > file2.txt");
# ^
# |
# Here.