2012-03-25 2 views
11

Я пытаюсь удалить подстроку из переменной с использованием СЭД, как это:Удаление подстроки из строки с использованием СЭД

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

где

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

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

echo "helloworld/src" 

usi Переменная нг было бы

echo "Directory: $PRINT_THIS" 

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

ответ

25

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

Ознакомьтесь String manipulation документации.

+0

Спасибо, это смешно, потому что я использовал струнные манипуляции в другом месте в скрипте, но забыл об этом – rluks

+1

Если вы не знаете, заканчивается ли $ rootpath с помощью косой черты, вы можете: 'shopt -s extglob; echo "$ {fullpath ## $ rootdir * (/)}" ' –

+0

Невозможно использовать его для моего примера, у меня есть' one = "branch_name_something" и 'two =" branch_name_ "'. Я хочу напечатать только «что-то» из $ 1. Итак, я попробовал 'echo $ {# $ {two} one}', но он выдает '-bash: $ {# $ {two} one}: bad substitution'. Не знаю, чего мне не хватает. –

8

Чтобы использовать переменные в СЭД, вы должны использовать его как это:

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 
+0

Да, спасибо! И это так просто – gontard

Смежные вопросы