如何使用Perl在文件中找到扩展的ASCII字符?

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)

或者,与chr一起打开包装也可以.例:

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$.提示.)


Dav*_*man 7

第一个可打印的ASCII字符是space(32).最后一个可打印的ASCII字符是~(126).所以我可能会用

while (<>) {
  print "$.\n" if /[^ -~]/;
}
Run Code Online (Sandbox Code Playgroud)

虽然它肯定会显示包含控制字符和扩展ASCII的行.

编辑:更改为打印行号而不是行本身.


Hyn*_*dil 5

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)