LINUX.ORG.RU

Sed. экранирование символа \

 ,


0

2

вот смотрю пример экранирования символа \ sed-ом:

sed -e 's/%/\\\x/g'

т.е. в результате все % заменятся на \x. Вопрос: почему \ перед х экранируется двумя бекслешами, а не одним типа

sed -e 's/%/\\x/g'

Спасибо

UPD. Для ясности поубирал лишние кавычки.

★★★★★

Последнее исправление: ipeacocks (всего исправлений: 5)

А где ты его взял? Может, там опечатка?

«\\\x» по-моему сработает так же, как «\\x», поскольку оставшийся «\x» будет воспринят как «x» (т.к. не является специальной комбинацией, следовательно, слэш ничего не делает).

proud_anon ★★★★★
()

Потому, что «\» тоже нужно экранировать, иначе баш отправит в sed не «\x», а специальный символ, имеющий это сокращение

derlafff ★★★★★
()
Ответ на: комментарий от derlafff

Потому, что «\» тоже нужно экранировать, иначе баш отправит в sed не «\x», а специальный символ, имеющий это сокращение

Зачем он это сделает, если выражение в одинарных кавычках?

proud_anon ★★★★★
()
Ответ на: комментарий от derlafff

ну так он же экранируется тоже бекслешем, т.е. должно бы быть типа «\\» и баш должен бы понять как просто символ «\».

ipeacocks ★★★★★
() автор топика
Ответ на: комментарий от derlafff

Кстати, наблюдается интересное явление:

Bash:

$ echo 's/%/\\\x/g'
s/%/\\\x/g

ZSH:

% echo 's/%/\\\x/g'
s/%/\/g
Однако это, я думаю, особенность echo. В sed у меня везде работает и с двумя бэкслэшами.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

Зачем он это сделает, если выражение в одинарных кавычках?

Похоже автор кода копипастил выражение из двойных :)

derlafff ★★★★★
()
Ответ на: комментарий от derlafff

Похоже автор кода копипастил выражение из двойных :)

А, да, такое возможно. :)

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от ipeacocks

TYPE=`echo $LOOP | sed 's/=/ /g' | awk '{print $2}' | sed -e 's/%/\\\x/g' | sed 's/+/ /g'`

Что я могу сказать об этом примере...
Зачем вызывать sed с параметром "-e", когда там одна команда?
Зачем такая комбинация? Можно как-то так:

awk -F '=' '{ $0=$2; gsub("%", "\\x"); gsub("+", " "); print; }'

(я, правда, только поверхностно проверил, и работать будет только в UTF-8)
На самом деле, тот скрипт вообще весь можно на AWK переписать.

Случайно Errata к той книжке нет ли в Интернете?

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.