
Estou tendo problemas para executar um script Perl através do shell Unix usando o system
comando Perl.
Tive comandos regex mais complexos que tive que ajustar de acordo para converter de Unix para Perl, e eles estão funcionando bem, mas não consigo descobrir o que está faltando aqui.
Testei com Mobaxterm v7.1 e Putty 0.60.
Eu tenho um arquivo ( 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
A partir deste arquivo estou tentando grep
apenas as linhas com arquivos (excluir os diretórios: linhas 1 e 4), e armazená-los em um novo arquivo:
system("grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*\$' file.txt > file2.txt");
file2.txt
não muda file.txt
e ainda contém os diretórios.
No entanto, este comando funciona através do shell Unix (sem a barra invertida antes de $
):
grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*$' file.txt > file2.txt
file2.txt
saída:
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
Eu tenho que escapar do $
caractere no comando do sistema Perl, é claro, para que o Perl não o leia como uma string desconhecida. Fora isso, o que precisa ser ajustado no comando do sistema?
Responder1
Entre aspas duplas, você precisa usar barras invertidas, ou seja, dobrar a barra invertida antes do ponto.
system("grep '^.*\\.[a-zA-Z0-9][a-zA-Z0-9]*\$' file.txt > file2.txt");
# ^
# |
# Here.