どのように私はPerlを使用してファイルに拡張ASCII文字を見つけることができますか?

StackOverflow https://stackoverflow.com/questions/881931

質問

どのように私は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]+ *
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top