Use*_*611 5 perl encoding parsing extended-ascii
如何使用Perl在文件中找到扩展的ASCII字符?任何人都可以获得脚本吗?
.....提前致谢.....
Ste*_*202 10
由于扩展的ASCII字符的值为128或更高,因此您只需调用单个字符上的ord并处理值> = 128的字符.以下代码从stdin读取并仅打印扩展的ASCII字符:
while (<>) {
while (/(.)/g) {
print($1) if (ord($1) >= 128);
}
}
Run Code Online (Sandbox Code Playgroud)
while (<>) {
foreach (unpack("C*", $_)) {
print(chr($_)) if ($_ >= 128);
}
}
Run Code Online (Sandbox Code Playgroud)
(我确信一些Perl大师可以将这两者浓缩为两个单行......)
要改为打印行号,您可以使用以下内容(这不会删除重复项,并且在传递unicode时会出现奇怪的行为):
while (<>) {
while (/(.)/g) {
print($. . "\n") if (ord($1) >= 128);
}
}
Run Code Online (Sandbox Code Playgroud)
(感谢Yaakov Belch的$.提示.)
第一个可打印的ASCII字符是space(32).最后一个可打印的ASCII字符是~(126).所以我可能会用
while (<>) {
print "$.\n" if /[^ -~]/;
}
Run Code Online (Sandbox Code Playgroud)
虽然它肯定会显示包含控制字符和扩展ASCII的行.
编辑:更改为打印行号而不是行本身.
Oneliner:
perl -nE'say$.if/[\xE0-\xFF]/'
Run Code Online (Sandbox Code Playgroud)
适用于较旧的perl版本
perl -lne'print$.if/[\xE0-\xFF]/'
Run Code Online (Sandbox Code Playgroud)