Frage

Wie kann ich erweiterte ASCII -Zeichen in einer Datei mit Perl finden? Kann jemand das Skript bekommen?

.....vielen Dank im Voraus.....

War es hilfreich?

Lösung

Seit dem erweiterten ASCII Zeichen haben Wert 128 und höher, Sie können einfach anrufen ord Bei einzelnen Zeichen und verarbeiten Sie diejenigen mit einem Wert> = 128. Der folgende Code liest aus stdin und druckt nur die erweiterten ASCII -Zeichen aus:

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

Alternative, auspacken zusammen mit Chr wird auch funktionieren. Beispiel:

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

(Ich bin sicher


Um die Zeilennummern stattdessen zu drucken, können Sie Folgendes verwenden (dies entzieht keine Duplikate und hat ein seltsames Verhalten, wenn Unicode übergeben wird):

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

(Vielen Dank Yaakov Belch für die $. Tipp.)

Andere Tipps

Das erste druckbare ASCII -Zeichen ist space (32). Das letzte druckbare ASCII -Zeichen ist ~ (126). Also würde ich wahrscheinlich benutzen

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

Obwohl es zugegebenermaßen auch Zeilen mit Steuerzeichen sowie erweiterter ASCII enthalten wird.

Bearbeiten: Geändert, um die Zeilennummer und nicht die Zeile selbst zu drucken.

Einzeiler:

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

Für ältere Perlversionen

perl -lne'print$.if/[\xE0-\xFF]/'

Eine entscheidende Frage ist, ob die

Bytes verwenden;

Pragma sollte in Kraft sein. Das Poster sollte das entscheiden. Zum Auspflanzen Figuren Mit Codes von mehr als 127 reicht das Folgende aus:

print grep 127 < ord, split // while <>;

oder

print grep /[^[:ascii:]]/, split // while <>;

HYNEK -PICHI -VYCHODIL -Antwort:

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

Nur ein begrenzter Teil des nicht gedruckten Tests sollte vermutlich sein

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

stattdessen.

Was ist mit Grep?

grep [\x00-\x1F\x7F-\xFF]+ *
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top