どのように私はPerlを使用してファイルに拡張ASCII文字を見つけることができますか?
-
22-08-2019 - |
質問
どのように私はPerlを使用してファイルに拡張ASCII文字を見つけることができますか?誰もがスクリプトを得ることができますか?
.....事前のおかげで.....
解決
拡張 ASCII の文字が値<のhref = "HTTP持っているので:// WWWを.asciitable.com / "のrel = "nofollowをnoreferrer"> 128と高いのは、あなただけ呼び出すことができます<のhref = "http://perldoc.perl.org/functions/ord.html" のrel =" nofollowを
次のコードは、STDINおよびプリントからのみ拡張ASCII文字を読み取り、値> = 128を有するものをnoreferrer ">個々の文字にORDのとハンドルwhile (<>) {
while (/(.)/g) {
print($1) if (ord($1) >= 128);
}
}
また、アンパックすると一緒に<のhref = "のhttp://はperldoc .perl.org /機能/ chr.html」のrel = "nofollowをnoreferrer"> CHR にも動作します。例:
while (<>) {
foreach (unpack("C*", $_)) {
print(chr($_)) if ($_ >= 128);
}
}
(私はいくつかのPerlの第一人者が2ワンライナーにこれらの両方を凝縮することができます確信している...)
<時間>の代わりに行番号を印刷するには、(これは重複を削除しないと、ユニコードが渡された奇妙な振る舞いを持つことになります)、次を使用することができます
while (<>) {
while (/(.)/g) {
print($. . "\n") if (ord($1) >= 128);
}
}
($.
チップ用href="https://stackoverflow.com/users/104746/yaakov-belch"> Yaakovのげっぷのおかげで
他のヒント
第一の印刷可能なASCII文字はspace
(32)です。最後の印刷可能なASCII文字は~
(126)です。だから私はおそらく使用したい。
while (<>) {
print "$.\n" if /[^ -~]/;
}
これは、確かに、また、拡張ASCIIと同様に制御文字を含む行が表示されない。
の編集の行番号ではなく、ライン自体を印刷するように変更。
。Onelinerます:
perl -nE'say$.if/[\xE0-\xFF]/'
古いバージョンのPerlのための
perl -lne'print$.if/[\xE0-\xFF]/'
重大な疑問があるかどうか。
バイトを使用し、
プラグマを有効にする必要があります。ポスターはそれを決める必要があります。 127より大きいコードでの文字のを選ぶために、以下で十分です。
print grep 127 < ord, split // while <>;
または
print grep /[^[:ascii:]]/, split // while <>;
ハイネック-Pichi- Vychodilの答えます:
perl -nE'say$.if/[\xE0-\xFF]/'
は、非印刷の限られた一部は、おそらく
でなければならないテストperl -nE'say$.if/[\x80-\xFF]/'
の代わります。
grepのはどう?
grep [\x00-\x1F\x7F-\xFF]+ *