0

perl スクリプト内から grep を宣言する方法に関する問題に少し行き詰まっています。私がやりたいことは、私の perl スクリプトに次のコマンドを実行させることです。

cat config.ini | grep -v "^#" | grep -v "^$"

通常、この式は先頭に # と $ があるすべてのエントリをクリーンアップ/フィルタリングし、構成された変数を出力します。

しかし、私はそれを宣言する方法がわかりません。次の式を使用しましたが、grep # または $ を導入するポイントに到達すると失敗します

system("(cat config.ini| grep ........);

なにか提案を?

4

3 に答える 3

4
cat config.ini | grep -v "^#" | grep -v "^$"

は書き方が悪い

grep -v "^[#$]" config.ini

文字列を生成するには

grep -v "^[#$]" config.ini

文字列リテラルを使用できます

'grep -v "^[#$]" config.ini'

そう

system('grep -v "^[#$]" config.ini');
die("Killed by signal ".($? & 0x7F)."\n") if $? & 0x7F;
die("Exited with error ".($? >> 8)."\n") if $? >> 8;

system('grep -v "^[#$]" config.ini');

の略です

system('/bin/sh', '-c', 'grep -v "^[#$]" config.ini');

ただし、シェルは必要ないため、代わりに次を使用できます。

system('grep', '-v', '^[#$]', 'config.ini');
die("Killed by signal ".($? & 0x7F)."\n") if $? & 0x7F;
die("Exited with error ".($? >> 8)."\n") if $? >> 8;

しかし、Perl で実行した方がクリーンで堅牢です。

open(my $fh, '<', 'config.ini')
   or die($!);

while (<$fh>) {
   print if !/^[#$]/;
}
于 2015-06-30T12:54:23.563 に答える
0
print if !(/^#/|/^$/);

提案された式を使用してみましたが、これほどうまく機能しませんでした。それを減らすか、より良い方法で ir を書く方法はありますか?

于 2015-07-16T11:53:37.457 に答える