Nas aspas duplas, é necessário inverter as 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.
Estou tendo problemas para executar um script Perl através do shell Unix usando o comando system
do Perl.
Eu tive comandos de regex mais complexos que tive que ajustar de acordo para converter de Unix para Perl, e eles estão funcionando bem, mas eu não consigo descobrir o que está faltando aqui.
Eu 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 eu estou tentando grep
apenas as linhas com arquivos (excluir 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 de file.txt
e ainda contém os diretórios.
No entanto, este comando funciona através do shell Unix (sem a contrabarra antes do $
):
grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*$' file.txt > file2.txt
file2.txt
output:
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?