我嘗試用Perl使用grep,但我必須recive從Perl的參數使用grep選擇用它們,我這樣做如何從perl腳本參數傳遞給bash腳本
#!/usr/bin/perl
system(grep -c $ARGV[0] $ARGV[1]);
,這將引發一個錯誤,這怎麼可以實施?
我嘗試用Perl使用grep,但我必須recive從Perl的參數使用grep選擇用它們,我這樣做如何從perl腳本參數傳遞給bash腳本
#!/usr/bin/perl
system(grep -c $ARGV[0] $ARGV[1]);
,這將引發一個錯誤,這怎麼可以實施?
system('grep', '-c', $ARGV[0], $ARGV[1]);
但請考慮這是否是你想要做的。 Perl可以在不調用外部程序的情況下自行完成很多事情。
見http://stackoverflow.com/questions/3477916/using-perls-system/3478060#3478060進行錯誤處理。 – daxim
system()
的參數必須是字符串(或字符串列表)。請嘗試:
#!/usr/bin/perl
system("grep -c $ARGV[0] $ARGV[1]");
列表形式更安全。考慮有人用''的第一個參數調用你的腳本的可能性; rm -rf $ HOME''。這不是真正的問題,除非腳本以額外的權限運行(用戶可以直接運行'rm -rf $ HOME'),但值得考慮。如果您需要調用shell爲您執行命令,則單字符串表單很有用;例如'system(「command1 | command2」)'*可以在Perl中完成,但是它有很多工作。 'perldoc -f系統' –
它也失敗了像'script.pl「這樣簡單的東西不能」文件「 – ikegami
您可能不會從該代碼中得到您所期望的。從perldoc -f system
:
The return value is the exit status of the program as returned by
the "wait" call.
system
實際上不會給你數從grep
,剛剛從grep的過程的返回值。
要能夠使用perl中的值,請使用qx()
或反引號。例如。
my $count = `grep -c ... `;
# or
my $count2 = qx(grep -c ...);
請注意,這會在數字後出現換行符,例如: 「6 \ n」 個。
但是,爲什麼不使用所有perl?
my $search = shift;
my $count;
/$search/ and $count++ while (<>);
say "Count is $count";
由鑽石操作<>
執行可以在不法分子手中的危險,但隱含open
。你不是可以手動打開文件用三個參數的open:
use autodie;
my ($search, $file) = @ARGV;
my $count;
open my $fh, '<', $file;
/$search/ and $count++ while (<$fh>);
say "Count is $count";
'別名grepc = 'grep的-c $ @'''在.bashrc' – ikegami