Regex работает в оболочке, но не через скрипт Perl

У меня возникла проблема с выполнением скрипта Perl через оболочку Unix с использованием system команды Perl.
У меня были более сложные команды регулярных выражений, которые я должен был соответственно настроить для преобразования из Unix в Perl, и они работают нормально, но я не могу понять, чего здесь нет.
Я тестировал Mobaxterm v7.1 и Putty 0.60.

У меня есть файл ( 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 

Из этого файла я пытаюсь grep только строки с файлами (исключить каталоги: строки 1 и 4) и хранить их в новом файле:

 system("grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*\$' file.txt > file2.txt"); 

file2.txt не изменяется из file.txt и содержит каталоги.

Однако эта команда работает через оболочку Unix (без обратной косой черты перед $ ):

 grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*$' file.txt > file2.txt 

file2.txt :

 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 

Конечно, мне нужно избежать символа $ в системной команде Perl, чтобы Perl не читал его как неизвестную строку. Кроме того, что нужно настроить в системной команде?

В двойных кавычках вам нужно обратная косая черта, т.е. двойная обратная косая черта перед точкой.

 system("grep '^.*\\.[a-zA-Z0-9][a-zA-Z0-9]*\$' file.txt > file2.txt"); # ^ # | # Here.