Domanda

Come posso trovare I caratteri ASCII estesi in un file utilizzando Perl?Chiunque può ottenere lo script?

.....grazie in anticipo.....

È stato utile?

Soluzione

Dal momento che le caratteri hanno un valore 128 e superiori , si può chiamare ord sui singoli personaggi e gestire quelli con un valore> = 128. Il seguente codice legge da standard input e stampa solo i caratteri ASCII estesi:

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

In alternativa, unpack insieme con chr funziona anche. Esempio:

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

(Sono sicuro che alcuni Perl guru può condensare entrambe queste due battute ...)


Per stampare i numeri di riga, invece, è possibile utilizzare il seguente (questo non rimuovere i duplicati, ed avrà un comportamento strano quando viene passata unicode):

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

( Yaakov Belch per la punta $..)

Altri suggerimenti

Il primo carattere ASCII stampabile è space (32). L'ultimo carattere ASCII stampabile è ~ (126). Quindi probabilmente sarei uso

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

anche se sarà, certamente, visualizzare anche linee contenenti caratteri di controllo e ASCII esteso.

Modifica:. Cambiato per stampare il numero di riga piuttosto che la linea stessa

Oneliner:

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

per le versioni più vecchie di perl

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

Una domanda cruciale è se la

uso bytes;

Pragma dovrebbe essere a tutti gli effetti. Il poster deve decidere che. Per scegliere caratteri con codici superiori a 127, il seguente sarà sufficiente:

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

o

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

Hynek -Pichi - Vychodil risposta:

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

i test solo una parte limitata di un non-la stampa dovrebbe presumibilmente essere

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

invece.

Che dire di grep?

grep [\x00-\x1F\x7F-\xFF]+ *
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top