需要命令行扩展才能打印所有键盘字符

时间:2010-09-15 13:26:07

标签: regex command-line sed awk

是否有类似awk或sed的命令行hack我可以发出生成所有键盘字符的列表(例如a-zA-z0-9! - *等)?我正在我的介绍编程类中编写一个简单的Caesar密码程序,我们不是通过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 个答案:

答案 0 :(得分:1)

这就是你要找的东西:

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

这会产生:

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

我选择了33到126的范围作为可打印的字符。见ascii man page

答案 1 :(得分:1)

这是纯粹的外壳,没有外部:

$ 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)。