Задать вопрос
core1024
@core1024

Как правильно экранировать строку для sed?

Здравствуйте.
в файле есть строка следующего вида:
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
хочу заменить ее на такую строку:
allow="^.\*$" />

После мучений с экранированием попробовал вариант использовать hex, типа такого:
sed -i 's/\x31\x32\x37\x5c\x2e\x5c\x64\x2b\x5c\x2e\x5c\x64\x2b\x5c\x2e\x5c\x64\x2b\x7c\x3a\x3a\x31\x7c\x30\x3a\x30\x3a\x30\x3a\x30\x3a\x30\x3a\x30\x3a\x30\x3a\x31/\x5e\x2e\x5c\x2a\x24/g'

но никаких результатов такой вариант не дает(
Заранее благодарен за ответ
  • Вопрос задан
  • 243 просмотра
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
@keich
Инженер по системам мониторинга от IBM
Есть вопрос а нужно ли столь строгое выражение для поиска нужной строки? Если много подобных строк с небольшими различиями, то наверное что то вроде этого:

sed 's/allow="127\\\.\\d.\\\.\\d.\\\.\\d.|::1|0:0:0:0:0:0:0:1"\s*\/>/allow="^\.\\\*$" \/>/g'

Лучше зарание проверить какие строки попали под выражение:

grep 'allow="127\\\.\\d.\\\.\\d.\\\.\\d.|::1|0:0:0:0:0:0:0:1"\s*\'
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
[guest@localhost ~]$ s='hello allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> hello'
[guest@localhost ~]$ 
[guest@localhost ~]$ src='allow="127\\\.\\d+\\\.\\d+\\\.\\d+|::1|0:0:0:0:0:0:0:1" />'
[guest@localhost ~]$ dst='allow="^.\\*$" />'
[guest@localhost ~]$ 
[guest@localhost ~]$ echo "$s"
hello allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> hello
[guest@localhost ~]$ 
[guest@localhost ~]$ echo "$src"
allow="127\\\.\\d+\\\.\\d+\\\.\\d+|::1|0:0:0:0:0:0:0:1" />
[guest@localhost ~]$ 
[guest@localhost ~]$ echo "$dst"
allow="^.\\*$" />
[guest@localhost ~]$
[guest@localhost ~]$ echo "$s" | sed "s%$src%$dst%g"
hello allow="^.\*$" /> hello
[guest@localhost ~]$
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы