使用 sed 从字符串中删除子字符串
Posted
技术标签:
【中文标题】使用 sed 从字符串中删除子字符串【英文标题】:Removing substring out of string using sed 【发布时间】:2012-04-09 07:19:27 【问题描述】:我正在尝试使用 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 删除子字符串,我做错了什么?谢谢
【问题讨论】:
【参考方案1】:你不需要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 文档。
【讨论】:
谢谢,这很有趣,因为我在脚本的其他地方使用了字符串操作,但忘记了 如果你不知道 $rootpath 是否以斜线结尾,你可以这样做:shopt -s extglob; echo "$fullpath##$rootdir*(/)"
无法在我的示例中使用它,我有 one="branch_name_something"
和 two = "branch_name_"
。我只想从 $one 打印“某物”。所以,我尝试了echo $#$twoone
,但它抛出了-bash: $#$twoone: bad substitution
。不知道我错过了什么。
您使用的语法与我上面使用的完全不同。【参考方案2】:
要在 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
【讨论】:
以上是关于使用 sed 从字符串中删除子字符串的主要内容,如果未能解决你的问题,请参考以下文章