Удаление подстроки из строки с помощью sed

Я пытаюсь удалить подстроку из переменной с помощью sed следующим образом:

PRINT_THIS="`echo "$fullpath" | sed 's/${rootpath}//' -`"

где

fullpath="/media/some path/dir/helloworld/src"
rootpath=/media/some path/dir

Я хочу повторить только остальную часть полного пути, как это (я использую это в целом связке каталогов, поэтому мне нужно сохранить его в переменных и сделать это автоматически

echo "helloworld/src"

используя переменную, она будет

echo "Directory: $PRINT_THIS"

Проблема в том, что я не могу заставить sed удалить подстроку, что я делаю неправильно? Благодаря

Ответ 1

Вам не нужно sed для этого, достаточно только bash:

$ fullpath="/media/some path/dir/helloworld/src"
$ rootpath="/media/some path/dir"
$ echo ${fullpath#${rootpath}}
/helloworld/src
$ echo ${fullpath#${rootpath}/}
helloworld/src
$ rootpath=unrelated
$ echo ${fullpath#${rootpath}/}
/media/some path/dir/helloworld/src

Ознакомьтесь с документацией Обработка строк.

Ответ 2

Чтобы использовать переменные в sed, вы должны использовать его следующим образом:

sed "[email protected][email protected]@g" FILE

две вещи:

  • Я использую двойные кавычки (оболочка не расширяет переменные в одинарных кавычках)
  • Я использую другой разделитель, который не конфликтует с косой чертой в ваших путях.

Пример:

$ rootpath="/media/some path/dir"
$ fullpath="/media/some path/dir/helloworld/src"
$ echo "$fullpath"
/media/some path/dir/helloworld/src
$ echo "$fullpath" | sed "[email protected][email protected]@"
/helloworld/src