🐹 Bash: Спецсимволы и экранирование символов.

Содержание:

1. Описание.
2. Заменяем текст со спецсимволами.
3. Оригиналы источников информации.


1. Описание.

К примеру, требуется заменить:

<hello world>

на

hello world

Естественно, требуется составить стандартную конструкцию типа:

sed -i 's/<hello world>/hello world/g' test.php

Однако, на выходе мы не получим hello world. Проблема заключается в том, что текст который мы заменяем прекрасно экранируется, а вот который мы вставляем он идет чистым текстом, и все спецсимволы попросту удаляются. Для выхода из этого положения мы используем малоизвестную возможность sed, возможность работы в hex-16.

Таким образом мы сделаем сразу 2 дела, сможем с легкостью конвертировать строку любой сложности в sed, не ожидая проблем с спецсимволами. И так же сможем вставлять их в вывод, не опасаясь остановки самого скрипта.

sed -i 's/\x3Chello\x3E\,/hello world,/g' test.php

2. Заменяем текст со спецсимволами.

Символ в ASCII Соответствие в HEX-16 Символ в ASCII Соответствие в HEX-16
! \x21 " \x22
# \x23 $ \x24
% \x25 & \x26
' \x27 * \x2A
( \x28 ) \x29
+ \x2B - \x2D
[ \x5B ] \x5D
\ \x5C ^ \x5E
_ \x5F ` \x60
, \x2C . \x2E
0 \x30 / \x2F
1 \x31 2 \x32
3 \x33 4 \x34
5 \x35 6 \x36
7 \x37 8 \x38
9 \x39 ? \x3F
: \x3A ; \x3B
> \x3E < \x3C
= \x3D @ \x40
} \x7D { \x7B
| \x7C ~ \x7E
A \x41 B \x42
C \x43 D \x44
E \x45 F \x46
G \x47 H \x48
I \x49 J \x4A
K \x4B L \x4C
M \x4D N \x4E
O \x4F P \x50
Q \x51 R \x52
S \x53 T \x54
U \x55 V \x56
W \x57 X \x58
Y \x59 Z \x5A
a \x61 b \x62
c \x63 d \x64
e \x65 f \x66
g \x67 h \x68
i \x69 j \x6A
k \x6B l \x6C
m \x6D n \x6E
o \x6F p \x70
q \x71 r \x72
s \x73 t \x74
u \x75 v \x76
w \x77 x \x78
y \x79 z \x7A
DEL \x7F    

3. Оригиналы источников информации.

  1. qna.habr.com «sed вставляем спецсимволы»
  2. istarik.ru «ASCII таблица»

Читайте также: