「mate-」で始まるが「-dev」で終わらないパッケージを選択するには?

「mate-」で始まるが「-dev」で終わらないパッケージを選択するには?

すべてのMATEパッケージをインストールしたいと思います。

$ sudo apt-get install '^mate'

ただし、あまりにも多くのパッケージを選択し、一部のパッケージがインストールされている一部のパッケージと競合します。

今私はそれらを除外したいと思います。どんなアイデアがありますか?

当然、これはうまくいきません。

$ sudo apt-get install '^mate && !-dev'

あるいは、単にapt-getがクラッシュするパッケージを無視するようにすることはできますか?

答え1

正規表現だけで引数として渡すことができますapt-get install

必要な操作を実行する正規表現を作成できますが、退屈です。正規表現の否定は正規表現を使用して表現できますが、2の補数正規表現のサイズは通常、元の正規表現のサイズに応じて指数関数的に大きくなります。

apt-get install '^mate(.?.?.?|.*([^v]|[^e]v|[^d]ev|[^-]dev))$'

Aptitudeの検索モードを使用して、ある程度適切な構文でパッケージリストを作成し、結果リストをまたはにapt-get install渡すことができますaptitude install

aptitude search '^mate !-dev$'

答え2

次のように試すことができます。

list="" ; for pkg in $(apt-cache search ^mate | grep -v -- '-dev'); list="$list $pkg" ; done ; sudo apt-get install $list

答え3

私は直接このような質問をしたことがあります。否定的な予測を試しましたが、apt-getはこれを理解していません。それで、同じ結果を保持する別の方法を見つけて、ここで答えを見つけました。それにもかかわらず、選択したソリューションはgrepを使用しているため、プレビューを使用して呼び出し側で検索表現をはるかに短縮できます。

apt-cache search '^mate' | grep -P '^mate(?!.*dbg)(?!.*dev).*'

Matesパッケージ(atrilなど)には、mateで始まる名前はありません。彼らはそれをまったく含んでいません。

関連情報