我有像这样的行
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"
什么都没发生。正则表达式似乎是正确的(可能需要反转),但至少应该在文件中发生变化,对吗?
答案 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'
模式细节:
[[:alnum:]]+
- 一个或多个字母数字符号\/
- 文字/