Удаление подстроки из строки с помощью СЭД
Я пытаюсь удалить подстроку из переменной, используя 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