2015-07-30 3 views
-3
$sea = xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz 

и я хочу извлечь только DMJK.UK.1.0-32133-Z-1, который является первым вхождения, и строка поиска начнется как DMJK.Извлечь подстроку из строки в сценарии оболочки

$sea = anything-anything.xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz matchessadds.dsdsds.21212.anything-anything 

или $ море = ничего-anything.xyz-Аджай-нет-siddhart-ubidone-ФДГ-DMJK.UK.1.0-32133-Z-1.tar.bz2 matchessadds.dsdsds.21212.anything -anything

необходимости извлекать начало от DMJK и перед любым ".tgz" или ".tar" или "tar.bz2",

о/р должен быть DMJK.UK.1.0-32133-Z- 1 в приведенном выше случае.

главная строка может быть все, что включают в себя формат

«anything.anything-DMJK.XXX. [] 0-9]. [0-9]. [0-9] -3213309- [AZ] - [0-9] .tar.tgz ничего-ничего "

изменения на лету, о/р может быть DMJK.XXX.1.3.0-3213309-Z-13

Я пытался, но его не работает :

echo $sea | sed 's#.*(DMJK.*).t*#\1#g' 

ответ

0

Есть более эффективные способы сделать это, но вы можете исправить свой текущий золь

sed -E 's#.*(DMJK.*)\.(tgz|tar.bz2|tar)#\1#g' 

(ну, вроде. Это, возможно, не работает по желанию в строке с .tar.bz5. Однако не совсем понятно, что вы хотите сделать в этом случае.)

+0

Почему o/p идет по ссылке DMJK.UK.1.0-32133-Z-1 соответствует –

+0

o/p - это ссылка, которая, поскольку соответствует re как предусмотрено. (?) Использование -E говорит sed использовать расширенные регулярные выражения, поэтому шаблон соответствует DMJK, за которым следует антия (это первая группа), за которой следуют любые «tgz», «tar.bz2» или «tar». (обратите внимание, что «tarxbz2» также соответствует, так как «.» является метасимволом, но все это поле избыточно, так как оно соответствует «tar») –

Смежные вопросы