是否有类似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值,但我更喜欢更接近命令行的东西作为更加闪亮的例子。
答案 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
)。