Удаление подстроки из строки с помощью 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