LINUX.ORG.RU

Помогите заставить sed обрабатывать знак бакса $ в качестве шаблона поиска и замены!


0

0

Элементарный код - хочу заменить в строке все $ на S

VAR="Hello\$world\$"
echo "VAR = '$VAR'"
VAR2=`echo "$VAR" | sed s/\$/S/g`
echo "VAR2 = '$VAR2'"

Эта хрень выводит следующее

VAR = 'Hello$world$'
VAR2 = 'Hello$world$S'

Дело в том, что аргумент sed-а сначала обрабатывается шеллом, в этот момент съедается backslash. Вот, как работает у меня:

$ var='Hello$world$'
$ echo $var | sed 's/\$/S/g'
HelloSworldS
$ echo $var | sed s/\\$/S/g
HelloSworldS

То есть или удваиваем backslash, чтобы один дошёл до sed-а, или (что я и предпочитаю) квотить апострофами всё, чему не нужна подстановка шелл-переменных.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.