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