正規表現を使用した検索と削除

正規表現を使用した検索と削除

bashで正規表現を使用して与えられた文字列を検索し、特定の単語の発生を取り除くには?この表現が出てきました。

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

私が達成したいのは、そのような特定の文字列からcjkuni-ukai-fonts-0.2.20080216.1-35.el6.noarch式が削除され、cjkuni-ukai-fonts-残っel6.noarchているはずです0.2.20080216.1-35。私のシステムにインストールできることは非常に限られているので、perlや他のデフォルト以外のコマンドを使用することはできません。どんな助けでも大変感謝します。

PS:sedを試しましたが、正しく動作しませんでした。

答え1

本当に純粋な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

ソリューションに満足している場合sed

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

GNUにアクセスできる場合は、grep次のこともできます。

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

または

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

最後に、CentOSを実行しているので、Perlをインストールするのはかなり安全なので、代わりに次のことができます。

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

関連情報