2016-10-22 9 views
0

Я хочу совместить, но не включая заданную строку . Таким образом, в тексте какBash Parameter Expansion - соответствует, но не включая регулярное выражение

seirots-llet-ew-yhw-20-30-seirotS lleT eW yhW - yrotS ruoY lleT 

Я хочу, чтобы это было уменьшено до

20-30-seirotS lleT eW yhW - yrotS ruoY lleT 


Так у меня есть набор обращенных строк, которые я захватить в переменном Баше и хотим расширить переменный регулярное выражение, чтобы достичь чего-то вроде этого ниже:

Вход:

seirots-llet-ew-yhw-20-30-seirotS lleT eW yhW - yrotS ruoY lleT 
spets-ruoy-ecarter-30-30-spetS ruoY ecarteR - yrotS ruoY lleT 
cra-yrots-40-30-crA yrotS ruoY - yrotS ruoY lleT 
skcabhsalf-etaerc-50-30-skcabhsalF gnitaerC - yrotS ruoY lleT 
noitnetta-60-30-noitnettA gnipeeK dna gnitteG - yrotS ruoY lleT 

Выход:

20-30-seirotS lleT eW yhW - yrotS ruoY lleT 
30-30-spetS ruoY ecarteR - yrotS ruoY lleT 
40-30-crA yrotS ruoY - yrotS ruoY lleT 
50-30-skcabhsalF gnitaerC - yrotS ruoY lleT 
60-30-noitnettA gnipeeK dna gnitteG - yrotS ruoY lleT 


Мой Баш код выглядит следующим образом:

value="${reversed##*[a-z]-[0-9]}" 

Но результат не чего я желаю:

0-30-seirotS lleT eW yhW - yrotS ruoY lleT 
0-30-spetS ruoY ecarteR - yrotS ruoY lleT 
0-30-crA yrotS ruoY - yrotS ruoY lleT 
0-30-skcabhsalF gnitaerC - yrotS ruoY lleT 
0-30-noitnettA gnipeeK dna gnitteG - yrotS ruoY lleT 

Обратите внимание, как первый разряд опущен.

+1

Я не получаю то, что вы просите, как _at all_. И, пожалуйста, опубликуйте фрагменты текста, а не изображения. 1.1k rep, вы должны это знать. –

+1

это то, что вы хотите? 'S = 'seirots-LLET-EW-YHW-20-30'; echo "$ {s %% [0-9] *}" ' – Sundeep

+0

@ Jean-FrançoisFabre Я добавил текст – atefth

ответ

1

Для того, чтобы удалить все после первой совпадающей цифры:

$ s='seirots-llet-ew-yhw-20-30-seirotS lleT eW yhW - yrotS ruoY lleT' 
$ echo "${s%%[0-9]*}" 
seirots-llet-ew-yhw- 

Таким образом, в описанном выше случае, 20-30-seirotS lleT eW yhW - yrotS ruoY lleT был подобран должен быть удален, и в результате строка seirots-llet-ew-yhw-. Результат может быть затем использована как строка будет удалена с начала s переменной

$ echo "${s#${s%%[0-9]*}}" 
20-30-seirotS lleT eW yhW - yrotS ruoY lleT 


Если extglob вариант оболочки доступен - см pattern matching manual

$ echo "${s##+([!0-9])}" 
20-30-seirotS lleT eW yhW - yrotS ruoY lleT 

+([!0-9]) означает один или более нецифры символы

Соответствие регулярному выражению:

$ [[ $s =~ [0-9].* ]] && echo ${BASH_REMATCH[0]} 
20-30-seirotS lleT eW yhW - yrotS ruoY lleT