如何使用sed删除部分文件路径

时间:2016-05-11 07:54:07

标签: regex bash sed

我有像这样的行

my_list=cloning/cloning-1.7.jar,commons/commons-lang-2.5.jar
my_lib_list=antlr/antlr-1.0.jar,aopa/aopa-1.0.jar

我需要删除'/'之前的部分,如下所示:

my_list=cloning-1.7.jar,commons-lang-2.5.jar
my_lib_list=antlr-1.0.jar,aopa-1.0.jar

我试过这个

 sed -i -e "s/(?<=\/).*?(\.jar)//g"

什么都没发生。正则表达式似乎是正确的(可能需要反转),但至少应该在文件中发生变化,对吗?

2 个答案:

答案 0 :(得分:0)

你可以这样做:

sed -r 's#^([^=]+=)[^/]+/([^,]+,)[^/]+/(.*)#\1\2\3#'

示例:

$ sed -r 's#^([^=]+=)[^/]+/([^,]+,)[^/]+/(.*)#\1\2\3#' <<<'my_list=cloning/cloning-1.7.jar,commons/commons-lang-2.5.jar'
my_list=cloning-1.7.jar,commons-lang-2.5.jar

$ sed -r 's#^([^=]+=)[^/]+/([^,]+,)[^/]+/(.*)#\1\2\3#' <<<'my_lib_list=antlr/antlr-1.0.jar,aopa/aopa-1.0.jar'           
my_lib_list=antlr-1.0.jar,aopa-1.0.jar

答案 1 :(得分:0)

您的模式 - (?<=\/).*?(\.jar) - 包含一个lookbehind((?<=...))和懒惰的匹配量词(*?)。 sed不支持。

您可以使用

sed -E 's/[[:alnum:]]+\///g'

请参阅the IDEONE demo

模式细节:

  • [[:alnum:]]+ - 一个或多个字母数字符号
  • \/ - 文字/