Избегайте точек в именах доменов, используя sed в Bash - PullRequest
7 голосов
/ 15 августа 2011

Я пытаюсь сохранить возврат подстановки sed в переменную:

  • D=domain.com
    echo $D | sed 's/\./\\./g'
    

    Правильно возвращает: домен \ .com

  • D1=`echo $D | sed 's/\./\\./g'`
    echo $D1
    

    Возвращает: domain.com

Что я делаю не так?

Ответы [ 2 ]

9 голосов
/ 15 августа 2011
D2=`echo $D | sed 's/\./\\\\./g'`
echo $D2

Подумайте о снарядах, повторно сканирующих строку при каждом ее выполнении. Таким образом, у echo $ D1, в котором есть экранированные символы, экранированные переменные применяются к значению при разборе строки, прежде чем echo увидит его. Решение еще больше ускользает.

Правильное экранирование вложенных операторов оболочки может сделать вас интересными.

2 голосов
/ 15 августа 2011

Оператор с обратной косой чертой заменяет обратную косую черту на обратную. Вам нужно убежать дважды:

D1=`echo $D | sed 's/\./\\\\./g'`

Вы также можете избежать первой обратной косой черты, если хотите.

...