私のメールキューは現在、同じドメインのバウンスメッセージでいっぱいですが、大文字と小文字が混在しています。
exiqgrep
を使用してこれらのメールをキューからフィルタリングしようとしましたが、コマンドでは大文字と小文字が区別されるようです。 大文字と小文字を区別しない検索を実行する方法はありますか?
他の紳士が指摘したように、exiqgrepプログラムは単なるPerlスクリプトです。 -r関数(受信者)に渡された生の値を取得し、パターンマッチングで使用します。パターンマッチは単純な$rcpt =~ /$opt{r}/
Perlテスト、デフォルトの一致は指定されていないため、大文字と小文字が区別されます。
Perlのすべてのものと同様に、TIMTOWTDI(それを行うには複数の方法があります)。上記の関数は-rに渡された値を削除またはサニタイズしないため、正規表現に大文字と小文字を区別しない修飾子を埋め込むだけで済みます。見る perldoc perlre
の詳細については、(?MODIFIERS:...)
シーケンスは機能します。
これは、大文字と小文字が混在する検索で探しているドメインが見つからないことを示した例ですが、検索語の一部としてインラインフラグ修飾子を使用すると、ドメインが見つかります。
OVZ-CentOS58[root@ivwm51 ~]# exiqgrep -r '[email protected]'
26h 4.0K 1VGRud-0001sm-P1 <> *** frozen ***
[email protected]
OVZ-CentOS58[root@ivwm51 ~]# exiqgrep -r '[email protected]'
OVZ-CentOS58[root@ivwm51 ~]# exiqgrep -r '(?i:[email protected])'
26h 4.0K 1VGRud-0001sm-P1 <> *** frozen ***
[email protected]
検索は次のようになります。
(?i:@thedomainyouseek.com)
manpage にはそのようなオプションは表示されませんが、exiqgrep
ユーティリティはPerl
スクリプトであり、そのソースは ニーズに合わせて変更 :
114 sub selection() {
115 foreach my $msg (keys(%id)) {
116 if ($opt{f}) {
117 # Match sender address
118 next unless ($id{$msg}{from} =~ /$opt{f}/); # here
119 }
120 if ($opt{r}) {
121 # Match any recipient address
122 my $match = 0;
123 foreach my $rcpt (@{$id{$msg}{rcpt}}) {
124 $match++ if ($rcpt =~ /$opt{r}/); # or here
125 }
126 next unless ($match);
127 }
128 if ($opt{s}) {
129 # Match against the size string.
130 next unless ($id{$msg}{size} =~ /$opt{s}/);
131 }
132 if ($opt{y}) {
133 # Match younger than
134 next unless ($id{$msg}{ages} $opt{o});
139 }
140 if ($opt{z}) {
141 # Exclude non frozen
142 next unless ($id{$msg}{frozen});
143 }
144 if ($opt{x}) {
145 # Exclude frozen
146 next if ($id{$msg}{frozen});
147 }
148 # Here's what we do to select the record.
149 # Should only get this far if the message passed all of
150 # the active tests.
151 $id{$msg}{d} = 1;
152 # Increment match counter.
153 $mcount++;
154 }
155 }