Нужно расширение командной строки для печати всех символов клавиатуры - PullRequest
0 голосов
/ 15 сентября 2010

Есть ли в командной строке подобный awk или sed хак, который я могу выдать, чтобы создать список всех символов клавиатуры (например, a-zA-z0-9! - * и т. Д.)? Я пишу простую программу шифрования Цезаря в моем вводном классе программирования, где мы делаем ротацию не через значения ASCII, а индексируем в строку алфавита, что-то вроде этого:

String alphabet = "abcdefghijklmnopqrstuvwxyz";

for (int pos = 0; pos < message.length(); pos++) {
  char ch = message.charAt(pos);
  int chPos = alphabet.indexOf(ch);
  char cipherCh = alphabet.charAt(chPos+rotation%alphabet.length());
  System.out.print(cipherCh);
}

Очевидно, что я могу написать цикл на каком-то другом языке и напечатать все значения ASCII, но я бы хотел, чтобы что-то ближе к командной строке, как пример более яркого.

Ответы [ 2 ]

1 голос
/ 16 сентября 2010

Это чистая оболочка, без внешних воздействий:

$ for i in {32..126}; do printf \\$(($i/64*100+$i%64/8*10+$i%8)); done
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Преобразует десятичные числа в восьмеричные и печатает соответствующий символ.

Работает в Bash и ksh, dash и ash (если вы используете $(seq 32 126) вместо {32..126}) и zsh (если вы используете print -n вместо printf).

1 голос
/ 15 сентября 2010

Это то, что вы ищете:

awk 'END {for (i=33; i<=126; i++) printf("%c",i); print ""}' /dev/null

Это генерирует:

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Я выбрал диапазон от 33 до 126 в качестве печатаемогосимволы.См. справочную страницу ascii

...