sed вставляем спецсимволы

Требуется заменить «helo» на «helo world»

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

sed -i ‘s/\”helo\”\,/”helo world”,/g’ test.php

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

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

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

sed -i ‘s/\”helo\”\,/”helo world”,/g’ test.php
Символ в ASCII
Соответствие в HEX-16
!
\x21
»
\x22
#
\x23
$
\x24
%
\x25
&
\x26
'
\x27
(
\x28
)
\x29
*
\x2A
+
\x2B
0
\x2C
-
\x2D
.
\x2E
/
\x2F
0
\x30
1
\x31
2
\x32
3
\x33
4
\x34
5
\x35
6
\x36
7
\x37
8
\x38
9
\x39
:
\x3A
;
\x3B
<
\x3C
=
\x3D
>
\x3E
?
\x3F
@
\x40
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
[
\x5B
\
\x5C
]
\x5D
^
\x5E
_
\x5F
`
\x60
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
{
\x7B
|
\x7C
}
\x7D
~
\x7E
DEL
\x7F

Комментарии (1)

  1. Eugeny 29.06.2017 Ответить
    Посоветуйте потоковый редактор не SED.
    Нужно после <body ... Тега вставлять сниппет. Все делать из командного файла

Оставить комментарий