如何使用Perl在文件中找到扩展的ASCII字符?
-
22-08-2019 - |
题
如何使用Perl在文件中找到扩展的ASCII字符?谁能得到脚本?
.....提前致谢.....
解决方案
自扩展以来 ASCII 字符有价值 128及更高, ,你可以打电话 ORD 在单个字符上,并以一个值> = 128处理那些。
while (<>) {
while (/(.)/g) {
print($1) if (ord($1) >= 128);
}
}
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]+ *
不隶属于 StackOverflow