저는 (상당히 최근의) 데비안 기반 배포판을 실행하는 시스템에 있습니다.
평범한 파일을 생성하고 싶습니다. 특정 패턴과 일치하는 설치된 모든 패키지 목록. 다음과 같이 실행하면됩니다.
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
댓글
답변
다음은 의 목록을 얻으십시오 Debian 기반 시스템에서 지연된 패키지 :
dpkg -l | grep ^ii | awk "{print $2}"
dpkg -l
의 출력 줄은 정상이라고 신뢰할 수 있습니다. . ^ii
패턴은 설치된 패키지의 줄과 일치하고 간단한 Awk는 두 번째 열인 패키지 이름 (apt-get install
명령). 패키지 이름은 공백을 포함 할 수 없으므로 다시 안전한 작업입니다.
코멘트
- 버전별로 grep하려는 경우 작동합니다. 이 경우
aptitude search
및apt list
의 답변은 ' 없습니다.
답변
grep 핑 dpkg 출력, 다음과 같이 검색어를 넣어야합니다. “ git “는 표본 검색어로 사용됩니다.
dpkg -l |grep "^ii git[[:space:]]"
캐럿 (^) ii 뒤에 (2) 개의 공백이 검색 용어 앞에 오는 것은 아무것도 보장하지 않습니다. 다른 문자 조합이 일치 할 수 있습니다.
검색된 용어에 인접한 [[:space:]]
이후 즉시 일치하는 공백만으로 부분 일치가 발생하지 않도록합니다.
|awk -F'/' 'NR>1{print $1}'
추가 "는 " 적절한 목록 전용 이름에 대해 가능한 가장 짧은 대답입니다. "