Edited at

シェルでASCII制御文字を扱う

More than 1 year has passed since last update.


制御文字の概要

通常は見えない特殊な文字のことを「制御文字」と呼びます。

ASCIIコードの場合は、0番目から31番目、127番目が制御文字です。

ここでは、シェル上で制御文字を扱う方法をまとめます。


制御文字の表現

キャレット記法
8進
10進
16進

^@
0
0
0

^A
1
1
1

^B
2
2
2

^C
3
3
3

^D
4
4
4

^E
5
5
5

^F
6
6
6

^G
7
7
7

^H
10
8
8

^I
11
9
9

^J
12
10
a

^K
13
11
b

^L
14
12
c

^M
15
13
d

^N
16
14
e

^O
17
15
f

^P
20
16
10

^Q
21
17
11

^R
22
18
12

^S
23
19
13

^T
24
20
14

^U
25
21
15

^V
26
22
16

^W
27
23
17

^X
30
24
18

^Y
31
25
19

^Z
32
26
1a

^[
33
27
1b

^\
34
28
1c

^]
35
29
1d

^^
36
30
1e

^_
37
31
1f

^?
177
127
7f


制御文字の入力方法

# Ctrl+V Ctrl+A

^A

# Ctrl+V Ctrl+V
^V


制御文字を表示する


catコマンドの場合

# 制御文字は見えない

$cat ctrl.txt
cat2013
horse014
sheep2015
monkey2016

# -vオプションを付与すると制御文字が見える
$cat -v ctrl.txt
cat^A2013
horse^B014
sheep^A2015
monkey^B2016


less, moreコマンドの場合、制御文字は見える

image


エスケープシーケンスと利用例


^Xの表記いろいろ

# 8進表記

$echo $'\030' | more
^X

# 16進表記
$echo $'\x18' | more
^X

# 文字表記
$echo $'\cX' | more
^X



利用例(grep)


# ^A を検索
$cat ctrl.txt | grep $'\cA' | more
cat^A2013
sheep^A2015

# sheep^A を検索
$cat ctrl.txt | grep $'sheep\cA' | more
sheep^A2015



利用例(sed)

# ^B を ^A に置換

$cat ctrl.txt | sed $'s/\x2/\x1/g' | more
cat^A2013
horse^A014
sheep^A2015
monkey^A2016