Pesquisar e remover com expressão regular

1

Como você usa expressões regulares no bash para pesquisar qualquer string e remover a ocorrência de uma determinada palavra? Esta é a expressão que eu criei

^([A-Za-z-]+)(-).*(el6.*)$

O que eu gostaria de realizar é, em uma string como cjkuni-ukai-fonts-0.2.20080216.1-35.el6.noarch , a expressão deve remover cjkuni-ukai-fonts- e el6.noarch e deixar apenas 0.2.20080216.1-35 . Como sou muito limitado no que posso instalar no sistema, não posso usar perl ou outros comandos não básicos. Qualquer ajuda seria apreciada.

P.S: Eu tentei sed, mas não consegui dar certo.

    
por bashquestion 11.11.2014 / 04:48

1 resposta

2

Se você realmente precisa fazer isso em pura bash:

$ foo="cjkuni-ukai-fonts-0.2.20080216.1-35.el6.noarch"
$ [[ $foo =~ [0-9.]+-[0-9]* ]] && echo $BASH_REMATCH
0.2.20080216.1-35

Se você estiver satisfeito com uma solução sed :

$ sed 's/.*-\([0-9.]*-[0-9]*\).*//' <<<$foo
0.2.20080216.1-35

Se você tiver acesso ao GNU grep , também poderá fazer:

$ grep -oE -- '[0-9.]+-[0-9]*' <<<$foo
0.2.20080216.1-35

ou

$ grep -oP -- '[.\d]+-\d+' <<<$foo
0.2.20080216.1-35

Finalmente, uma vez que você está rodando um sistema CentOS, é uma aposta bastante segura que o Perl esteja instalado, então você também pode fazer:

$ perl -pe 's/.*?([0-9.]+-[0-9]*).*/$1/' <<<$foo
0.2.20080216.1-35
    
por 11.11.2014 / 05:09