我正在尝试使用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删除子字符串,我做错了什么?感谢
答案 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
两件事:
例如:
$ 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