如何使用Perl在文件中找到扩展的ASCII字符?谁能得到脚本?

.....提前致谢.....

有帮助吗?

解决方案

自扩展以来 ASCII 字符有价值 128及更高, ,你可以打电话 ORD 在单个字符上,并以一个值> = 128处理那些。

while (<>) {
  while (/(.)/g) {
    print($1) if (ord($1) >= 128);
  }
}

或者, 打开包装 和...一起 chr 也将起作用。例子:

while (<>) {
  foreach (unpack("C*", $_)) {
    print(chr($_)) if ($_ >= 128);
  }
}

(我敢敢


要打印行号,您可以使用以下内容(这不会删除重复项,并且在传递Unicode时会具有奇怪的行为):

while (<>) {
  while (/(.)/g) {
    print($. . "\n") if (ord($1) >= 128);
  }
}

(谢谢 Yaakov Belch 为了 $. 小费。)

其他提示

第一个可打印的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 <>;

hynek -pichi -vychodil的答案:

perl -nE'say$.if/[\xE0-\xFF]/'

仅测试非印刷的有限部分应该是

perl -nE'say$.if/[\x80-\xFF]/'

反而。

那格雷普呢?

grep [\x00-\x1F\x7F-\xFF]+ *
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top