2016-05-11 2 views
1

У меня есть такие строкиКак использовать СЭД, чтобы удалить часть пути к файлу

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" 

Ничего не происходит. Regex кажется правильным (возможно, нужно перевернуть), но по крайней мере что-то должно измениться в файле, верно?

+0

Попробуйте 'sed -E '/ [[: alnum:]] + \ /// g'' (или' sed -r' s/[[: alnum:]] + \ /// g'') –

+0

'sed -E -i '/ [[: alnum:]] + \ /// g'' работал, спасибо! – matijasx

ответ

0

Ваш шаблон - (?<=\/).*?(\.jar) - содержит ((?<=...) назад ') и ленивым соответствия квантор (*?). Не поддерживаются sed.

Вы можете использовать

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

См the IDEONE demo

шаблонные детали:

  • [[:alnum:]]+ - 1 или более буквенно-цифровых символов
  • \/ - буквальный /
+0

Приняв, вы также заработали 2 балла и теперь можете использовать * полезные * вопросы и ответы. См. [Как повысить уровень переполнения стека?] (Http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)). –

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