패턴과 일치하는 설치된 패키지 목록을 얻는 올바른 방법은 무엇입니까?

저는 (상당히 최근의) 데비안 기반 배포판을 실행하는 시스템에 있습니다.

평범한 파일을 생성하고 싶습니다. 특정 패턴과 일치하는 설치된 모든 패키지 목록. 다음과 같이 실행하면됩니다.

apt list --installed "linux-image-*" | cut -d/ -f1 

하지만 신경 쓰지 않는 줄이 있습니다. 예 :

WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Listing... 

그러면 apt를 사용하지 않는 것이 좋습니다. 다음과 같이 dpkg-query를 실행할 수 있습니다.

dpkg-query --showformat="${Package}\n" --show "linux-image*" 

그러나 이것은 설치된 패키지에 국한되지 않습니다.

그렇다면 많은 텍스트 처리를해야하고 누가 그 공간을 신뢰할 수 있을까요?

그래서 결론 : 패턴과 일치하는 설치된 패키지 목록을 가져 오는 올바른 방법?


참고 :

  • 단순한 셸 글롭이 아닌 적절한 정규식이 될 수 있다면 보너스 포인트입니다.
  • 텍스트를 구문 분석하는 것은 이상적이지 않은 해결책 인 것 같습니다. 이것이 당신이 제안한 것이라면 왜 “더 나은 방법이 없는지”논쟁하십시오.

Answer

aptitude는 패키지 관리 도구에 알려진 모든 패키지 (설치되었거나 그렇지 않은 경우 정규식을 사용하여 검색)를 지원합니다. , 외부 출력없이 출력 형식을 지정하는 방법을 알 수 있습니다.

설치된 패키지 만 나열하려면 :

aptitude search "linux-image-.* ~i" 

설치된 패키지 이름 만 나열하려면

em> 정규 표현식과 일치 :

aptitude search "linux-image-.* ~i" -F "%p" 

문서는 사용 가능한 검색 패턴 출력 형식 지정자 에 대해 자세히 설명합니다. 또한이 사이트에서 예제를 찾을 수 있습니다. 예를 들어 적성과 함께 regexp를 사용하는 방법이 있습니까? , regexp with aptitude part 2 Linux-apt를 사용해서 만 보안 업데이트를 표시하거나 업그레이드합니다 .

답변

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F"/" "NR>1{print $1}" linux-image-3.16.0-4-amd64 linux-image-4.11.0-1-amd64 linux-image-4.12.0-1-amd64 linux-image-4.13.0-1-amd64 linux-image-4.8.0-2-amd64 linux-image-4.9.0-1-amd64 linux-image-4.9.0-2-amd64 linux-image-4.9.0-3-amd64 

정규식에 대해 이야기하기 :

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F"/" "NR>1 && $0~/4.1/{print $1}" linux-image-4.11.0-1-amd64 linux-image-4.12.0-1-amd64 linux-image-4.13.0-1-amd64 

또한 -f (-showformat) 옵션과 함께 dpkg-query를 사용할 수 있습니다.이 옵션은 패키지 이름없이 호출 될 때 기본적으로 설치된 패키지 만 가능합니다. 나열됩니다.

$ dpkg-query -f "${Package}\n" -W |grep "linux-image" #-W == --show 

댓글

  • " apt list 명령에 |awk -F'/' 'NR>1{print $1}' 추가 "는 " 적절한 목록 전용 이름에 대해 가능한 가장 짧은 대답입니다. "

답변

다음은 의 목록을 얻으십시오 Debian 기반 시스템에서 지연된 패키지 :

dpkg -l | grep ^ii | awk "{print $2}" 

dpkg -l의 출력 줄은 정상이라고 신뢰할 수 있습니다. . ^ii 패턴은 설치된 패키지의 줄과 일치하고 간단한 Awk는 두 번째 열인 패키지 이름 (apt-get install 명령). 패키지 이름은 공백을 포함 할 수 없으므로 다시 안전한 작업입니다.

코멘트

  • 버전별로 grep하려는 경우 작동합니다. 이 경우 aptitude searchapt list의 답변은 ' 없습니다.

답변

grep dpkg 출력, 다음과 같이 검색어를 넣어야합니다. “ git “는 표본 검색어로 사용됩니다.

dpkg -l |grep "^ii git[[:space:]]" 

캐럿 (^) ii 뒤에 (2) 개의 공백이 검색 용어 앞에 오는 것은 아무것도 보장하지 않습니다. 다른 문자 조합이 일치 할 수 있습니다.

검색된 용어에 인접한 [[:space:]] 이후 즉시 일치하는 공백만으로 부분 일치가 발생하지 않도록합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다