使用sed从字符串中删除子字符串

时间:2012-03-25 14:52:38

标签: bash sed substring

我正在尝试使用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 个答案:

答案 0 :(得分:26)

你不需要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文档。

答案 1 :(得分:9)

要在sed中使用变量,必须使用它:

sed "s@$variable@@g" FILE

两件事:

  • 我使用双引号(shell不用单引号扩展变量)
  • 我使用另一个与路径中的斜杠不冲突的分隔符

例如:

$ 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