Могу ли я использовать sed для управления переменной в bash? - PullRequest
45 голосов
/ 19 июля 2011

В моей программе я хотел бы сначала получить пользовательский ввод и вставить \ перед каждым / так что я пишу это, но это не работает.

echo "input a website"
read website

sed '/\//i\/' $website

Ответы [ 2 ]

101 голосов
/ 19 июля 2011

Попробуйте это:

website=$(sed 's|/|\\/|g' <<< $website)

Bash фактически поддерживает этот тип замены изначально :

${parameter/pattern/string} - заменить первое совпадение pattern на string.
${parameter//pattern/string} - заменить все совпадения pattern на string.

Поэтому вы можете сделать:

website=${website////\\/}

Объяснение:

website=${website // / / \\/}
                  ^  ^ ^  ^
                  |  | |  |
                  |  | |  string, '\' needs to be backslashed
                  |  | delimiter
                  |  pattern
                  replace globally
11 голосов
/ 19 июля 2011
echo $website | sed 's/\//\\\//g'

или, для лучшей читаемости:

echo $website | sed 's|/|\\/|g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...