"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로 시작하는 이름이 없습니다. 그들은 그것을 전혀 포함하지도 않습니다.

관련 정보