Shell-Script
正則表達式在 shell 中工作,但不能通過 Perl 腳本
我在使用 Perl 的
system
命令通過 Unix shell 執行 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 shell 工作(在 之前沒有反斜杠
$
):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.