Jak wydrukować wszystkie drukowalne znaki ASCII w CLI?


Odpowiedzi:


17

Spróbuj z printf i powłoką jak ksh93, zsh lub bash:

for ((i=32;i<127;i++)) do printf "\\$(printf %03o "$i")"; done;printf "\n"

Zobacz też : BASH FAQ


Lub ten sam pomysł, używając innego sposobu uzyskania wartości ósemkowej: for((i=32;i<=127;i++)) do printf "\\$((i/64*100+i%64/8*10+i%8))\t"; done;printf "\n"...
Peter.O

Lub za pomocą wbudowanego echa bash ...for((i=32;i<=127;i++)) do eval echo -ne $\'\\$((i/64*100+i%64/8*10+i%8))\'"\\\t"; done; echo
Peter.O,

28

Możesz to zrobić:

man ascii

aby zobaczyć cały zestaw znaków ascii, lub po prostu uruchom polecenie ascii.

$ ascii
Usage: ascii [-dxohv] [-t] [char-alias...]
   -t = one-line output  -d = Decimal table  -o = octal table  -x = hex table
   -h = This help screen -v = version information
Prints all aliases of an ASCII character. Args may be chars, C \-escapes,
English names, ^-escapes, ASCII mnemonics, or numerics in decimal/octal/hex.

Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex  
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL

1
lub po prostu ascii.
jmtd,

2
wydaje się niedostępne w systemie macOS Sierra
Walter Tross,

Na jakiej dystrybucji Linux jest to natywne? Ubuntu?
brandonsimpkins,

polecenie ascii nie jest dostępne w najnowszej wersji Ubuntu WSL, ale man asciidziała dobrze.
obrabować

Na macOS możesz zainstalować za asciipomocą naparu np.brew install ascii
kenlukas

11

Bardziej awkrozwiązanie, które jest (czyste), ale tutaj i tak jest:

awk 'BEGIN{for(i=32;i<127;i++)printf "%c",i; print}'

5

Strony podręcznika asciimożna również użyć do uzyskania takiej listy:

$ man 7 ascii
ASCII(7)                  Linux Programmer's Manual                  ASCII(7)

NAME
       ascii - ASCII character set encoded in octal, decimal, and hexadecimal

DESCRIPTION
       ASCII  is  the American Standard Code for Information Interchange. 
       It is a 7-bit code.  Many 8-bit codes (such  as  ISO  8859-1,  the  
       Linux default  character set) contain ASCII as their lower half.  
       The international counterpart of ASCII is known as ISO 646.

       The following table contains the 128 ASCII characters.

       C program '\X' escapes are noted.

       Oct   Dec   Hex   Char                        Oct   Dec   Hex  Char
       ──────────────────────────────────────────────────────────────────────
       000   0     00    NUL '\0'                    100   64    40   @
       001   1     01    SOH (start of heading)      101   65    41   A
       002   2     02    STX (start of text)         102   66    42   B
       003   3     03    ETX (end of text)           103   67    43   C
       004   4     04    EOT (end of transmission)   104   68    44   D
       005   5     05    ENQ (enquiry)               105   69    45   E
       006   6     06    ACK (acknowledge)           106   70    46   F
       007   7     07    BEL '\a' (bell)             107   71    47   G
       010   8     08    BS  '\b' (backspace)        110   72    48   H
       011   9     09    HT  '\t' (horizontal tab)   111   73    49   I
       012   10    0A    LF  '\n' (new line)         112   74    4A   J
       013   11    0B    VT  '\v' (vertical tab)     113   75    4B   K
       014   12    0C    FF  '\f' (form feed)        114   76    4C   L
       015   13    0D    CR  '\r' (carriage ret)     115   77    4D   M
       016   14    0E    SO  (shift out)             116   78    4E   N
       017   15    0F    SI  (shift in)              117   79    4F   O
       020   16    10    DLE (data link escape)      120   80    50   P
       021   17    11    DC1 (device control 1)      121   81    51   Q
       022   18    12    DC2 (device control 2)      122   82    52   R
       023   19    13    DC3 (device control 3)      123   83    53   S
       024   20    14    DC4 (device control 4)      124   84    54   T
       025   21    15    NAK (negative ack.)         125   85    55   U
       026   22    16    SYN (synchronous idle)      126   86    56   V
       027   23    17    ETB (end of trans. blk)     127   87    57   W
       030   24    18    CAN (cancel)                130   88    58   X
       031   25    19    EM  (end of medium)         131   89    59   Y
       032   26    1A    SUB (substitute)            132   90    5A   Z
       033   27    1B    ESC (escape)                133   91    5B   [
       034   28    1C    FS  (file separator)        134   92    5C   \  '\\'
       035   29    1D    GS  (group separator)       135   93    5D   ]
       036   30    1E    RS  (record separator)      136   94    5E   ^
       037   31    1F    US  (unit separator)        137   95    5F   _
       040   32    20    SPACE                       140   96    60   `
    ...
    ...

1

Z zsh:

$ print -raC16 {" "..~}
   !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /
0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?
@  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O
P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _
`  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o
p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~

1

Rozwijanie rozwiązania jlliagre (i przydatne, jeśli nie masz asciidostępnego polecenia):

awk 'BEGIN {for (i = 32; i < 127; i++) printf "%3d 0x%02x %c\n", i, i, i}'

Możesz także potokować powyższe, pr -t6 -w78aby uzyskać wynik jednej strony:

 32 0x20      48 0x30 0    64 0x40 @    80 0x50 P    96 0x60 `   112 0x70 p
 33 0x21 !    49 0x31 1    65 0x41 A    81 0x51 Q    97 0x61 a   113 0x71 q
 34 0x22 "    50 0x32 2    66 0x42 B    82 0x52 R    98 0x62 b   114 0x72 r
 35 0x23 #    51 0x33 3    67 0x43 C    83 0x53 S    99 0x63 c   115 0x73 s
 36 0x24 $    52 0x34 4    68 0x44 D    84 0x54 T   100 0x64 d   116 0x74 t
 37 0x25 %    53 0x35 5    69 0x45 E    85 0x55 U   101 0x65 e   117 0x75 u
 38 0x26 &    54 0x36 6    70 0x46 F    86 0x56 V   102 0x66 f   118 0x76 v
 39 0x27 '    55 0x37 7    71 0x47 G    87 0x57 W   103 0x67 g   119 0x77 w
 40 0x28 (    56 0x38 8    72 0x48 H    88 0x58 X   104 0x68 h   120 0x78 x
 41 0x29 )    57 0x39 9    73 0x49 I    89 0x59 Y   105 0x69 i   121 0x79 y
 42 0x2a *    58 0x3a :    74 0x4a J    90 0x5a Z   106 0x6a j   122 0x7a z
 43 0x2b +    59 0x3b ;    75 0x4b K    91 0x5b [   107 0x6b k   123 0x7b {
 44 0x2c ,    60 0x3c <    76 0x4c L    92 0x5c \   108 0x6c l   124 0x7c |
 45 0x2d -    61 0x3d =    77 0x4d M    93 0x5d ]   109 0x6d m   125 0x7d }
 46 0x2e .    62 0x3e >    78 0x4e N    94 0x5e ^   110 0x6e n   126 0x7e ~
 47 0x2f /    63 0x3f ?    79 0x4f O    95 0x5f _   111 0x6f o

W moim skrypcie uruchamiania niezależnym od systemu operacyjnego mam:

command -v ascii &> /dev/null || function ascii { awk 'BEGIN {for (i = 32; i < 127; i++) printf "%3d 0x%02x %c\n", i, i, i}' | pr -t6 -w78; }

(zwróć uwagę ;przed zamknięciem funkcji })

Specjalne podziękowania dla Stéphane Chazelas za tę pr -t6część.


0

Używanie jot(1):

$ jot -c 96 32

!
"
#
$
...
{
|
}
~

To polecenie drukuje 96 liczb całkowitych rozpoczynających się od 32 i formatuje każdą liczbę całkowitą jako znak ASCII, rozdzielany znakami nowej linii.


0

Z rozszerzeniem nawiasu klamrowego zsh :

$ echo {\ ..\~}
  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~

Ponieważ OP nie wspomniał o powłoce, logiczne jest przyjęcie bash (ponieważ jest to ustawienie domyślne). Czy masz odpowiedź na bash? Powyższe rozwiązanie nie działa.
ajgringo619

@ ajgringo619 Niestety nie znam żadnej porównywalnej metody w Bash 😥. Możesz wypróbować odpowiedzi printf lub awk, które są również dość zwięzłe.
Shaoyun
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.