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

Я пытаюсь удалить подстроку из переменной, используя 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 удалить подстроку, что я делаю неправильно? Спасибо

2 ответов


не нужно 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

Проверьте строковые манипуляции документация.


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

sed "s@$variable@@g" FILE

две вещи :

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

Ex:

$ rootpath="/media/some path/dir"
$ fullpath="/media/some path/dir/helloworld/src"
$ echo "$fullpath"
/media/some path/dir/helloworld/src
$ echo "$fullpath" | sed "s@$rootpath@@"
/helloworld/src