Можем ли мы использовать команду «sed» для замены строки на другую строку, содержащую символ «/»? [дубликат]

На этот вопрос уже есть ответ здесь:

Я пытаюсь заменить "_" на "/"

$ echo "hahahaa_the_cat_hahahaa" | sed "s/_///g"

Не работает.

1
задан 20 August 2019 в 14:10

3 ответа

Оператор замены (s/old/new/) может взять любой символ в качестве разделителя:

$ echo foo | sed 's|f|g|'
goo
$ echo foo | sed 'safaga'
goo

Поэтому просто используйте что-либо, что не является / и можно сделать то, что Вы хотите:

$ echo "hahahaa_the_cat_hahahaa" | sed 's|_|/|g'
hahahaa/the/cat/hahahaa

С другой стороны, можно выйти / с a \ (запишите \/):

$ echo "hahahaa_the_cat_hahahaa" | sed 's/_/\//g'
hahahaa/the/cat/hahahaa
5
ответ дан 3 December 2019 в 06:19

Проблема состоит в том, что Вы используете / как Ваш разделитель в sed также с помощью него в качестве символа для замены.

Попытайтесь использовать другой разделитель такой как |:

$ echo "hahahaa_the_cat_hahahaa" | sed 's|_|/|g'
3
ответ дан 3 December 2019 в 06:19

Выйдите из наклонной черты / символ обратной косой чертой \:

$ sed 's/_/\//g' <(echo 'https:__askubuntu.com')
https://askubuntu.com

т.е. использование a \ перед "/" останавливается "/" рассматриваемый как разделитель, но как символ, который будет переведен... (это, вероятно, не сформулировано очень хорошо извините),

3
ответ дан 3 December 2019 в 06:19

Другие вопросы по тегам:

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