Удаление подстроки из строки с помощью sed - PullRequest
11 голосов
/ 25 марта 2012

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

27 голосов
/ 25 марта 2012

Для этого вам не нужно 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

Ознакомьтесь с документацией Управление строками .

9 голосов
/ 25 марта 2012

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

sed "s@$variable@@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 "s@$rootpath@@"
/helloworld/src
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...