m 정규식 또는 와일드 카드 검색?


12

페도라 문서에 따르면 :

5.2. 고급 검색

패키지 이름을 모르면 검색을 사용하거나 옵션을 제공하십시오. 또는 yum 검색 옵션과 함께 와일드 카드 또는 정규식을 사용하여 검색 기준을 넓 힙니다.

음, 처음 엔에서 정규 표현식 알려진 구문이 작동하지 않을 것이다 이후이 단순히 잘못된 또는 오래된 것으로 생각 yum search하지만, 나는 발견 : yum search [cl-*]예. 그러나 그것은 다른 세상적인 일을합니다. 이름이나 설명에 "c"나 "l"문자가없는 것을 찾습니다. (내가 원하는 것은 cl-.*regexp 와 이름이 일치하는 모든 패키지를 찾는 것 입니다.

또한 yum 결과를에 파이프로 제안하는 사람이 거의 없다는 것을 발견했습니다 grep. 물론 문제를 해결합니다. 그러나 원칙적으로 대괄호 안의 기능이 무엇인지 알고 싶습니다. yum실제로 정규 표현식으로 검색 할 수 있다면 어떨까요?

답변:


13

YUM으로 검색

yum search명령 search이 이미 패키지 이름과 요약 내에서 하위 문자열을 찾기 때문에 검색 할 때 일반적으로 정규 표현식 (글로브)을 사용하지 않습니다 . 이것을 어떻게 알 수 있습니까? 를 사용할 때 알려주는 메시지가 있습니다 yum search.

이름과 요약 만 일치하며 모든 항목에 "모두 검색"을 사용하십시오.

참고 : 문자열 [cl-*]은 기술적으로 Bash 셸에서 glob입니다.

따라서 일반적으로 원하는 문자열 조각을 찾습니다 search. 특정 패키지를 찾을 때 정규식이 작동합니다. 이 명령이 좋아하는 YUM 있습니다 listinstall.

예를 들면 다음과 같습니다.
$ yum list cl-* | expand
Loaded plugins: fastestmirror, langpacks, refresh-packagekit, tsflags
Loading mirror speeds from cached hostfile
 * fedora: mirror.dmacc.net
 * rpmfusion-free: mirror.nexcess.net
 * rpmfusion-free-updates: mirror.nexcess.net
 * rpmfusion-nonfree: mirror.nexcess.net
 * rpmfusion-nonfree-updates: mirror.nexcess.net
 * updates: mirror.dmacc.net
Available Packages
cl-asdf.noarch                  20101028-5.fc19                 fedora          
cl-clx.noarch                   0.7.4-4.3                       home_zhonghuaren
cl-ppcre.noarch                 2.0.3-3.3                       home_zhonghuaren

정규식 / 글로브에 대해주의해야 할 유일한 경고는 쉘 내에 파일이 일치하도록 이름이 지정된 경우입니다 cl-*. 이 경우 쉘은 정규식 / 글로브를 YUM에 제공하기 전에 확장합니다.

따라서 regex / glob와 일치하는 파일이 있으면 yum list cl-*실행하는 대신 명령을 실행합니다 .yum list cl-filecl-*

예를 들면 다음과 같습니다.
$ ls cl-file
cl-file

$ yum list cl-*
Loaded plugins: fastestmirror, langpacks, refresh-packagekit, tsflags
Loading mirror speeds from cached hostfile
 * fedora: mirror.steadfast.net
 * rpmfusion-free: mirror.nexcess.net
 * rpmfusion-free-updates: mirror.nexcess.net
 * rpmfusion-nonfree: mirror.nexcess.net
 * rpmfusion-nonfree-updates: mirror.nexcess.net
 * updates: mirror.steadfast.net
Error: No matching Packages to list

다음과 같이 와일드 카드를 이스케이프 처리하여 이러한 상황을 방지 할 수 있습니다.

$ yum list cl-\* | expand
Loaded plugins: fastestmirror, langpacks, refresh-packagekit, tsflags
Loading mirror speeds from cached hostfile
 * fedora: mirror.dmacc.net
 * rpmfusion-free: mirror.nexcess.net
 * rpmfusion-free-updates: mirror.nexcess.net
 * rpmfusion-nonfree: mirror.nexcess.net
 * rpmfusion-nonfree-updates: mirror.nexcess.net
 * updates: mirror.dmacc.net
Available Packages
cl-asdf.noarch                  20101028-5.fc19                 fedora          
cl-clx.noarch                   0.7.4-4.3                       home_zhonghuaren
cl-ppcre.noarch                 2.0.3-3.3                       home_zhonghuaren

괄호는 어떻습니까?

[cl-*]대한 인수로 사용할 때 일치하는 파일이 로컬 디렉토리에 있다고 생각합니다 yum search. 쉘과 일치시킨 후이 파일들은 yum search어디에서 일치하는지 찾는 명령 으로 전달 되었습니다.

예를 들면 다음과 같습니다.
$ ls cl-file
cl-file

$ yum search cl-*
Loaded plugins: fastestmirror, langpacks, refresh-packagekit, tsflags
Loading mirror speeds from cached hostfile
 * fedora: mirror.dmacc.net
 * rpmfusion-free: mirror.nexcess.net
 * rpmfusion-free-updates: mirror.nexcess.net
 * rpmfusion-nonfree: mirror.nexcess.net
 * rpmfusion-nonfree-updates: mirror.nexcess.net
 * updates: mirror.dmacc.net
======================================================================= N/S matched: cl-file =======================================================================
opencl-filesystem.noarch : OpenCL filesystem layout

  Name and summary matches only, use "search all" for everything.

참고 : 위의 일치는 내 파일 이름과 일치 하지만 의도 cl-filecl-*것과 일치 하지 않습니다 .


우, 지금 봅니다. 글쎄, 그 설명입니다. 하나의 nitpicking 발언 cl-*은 정규 표현식이 아니지만 glob그것이 부르는 것 또는 그 밖의 것입니다. 그것은 Chomskian 용어로 정규 언어이지만 정규 언어에 대한 문법을 ​​정의하면 (연쇄, 변경 및 Kleene 별의 세 가지 기본 연산을 사용하여) 정규 표현식이라고 말합니다.
wvxvw

@wvxvw-맞습니다. 당신은 용어 정규 표현식으로 시작했고 나는 방금 그것에 8-)을 배웠습니다.
slm

3

yum 3.2.29와 함께 여기에 RHEL 6.5를 사용하는 확실히 다른 yum 버전 주의 :
쉘 globbing을 통해 현재 디렉토리의 어떤 것과도 일치하지 않도록 *를 인용해야합니다. /unix//a/155157/83329

어쨌든, 방금 다시 확인했지만 실제로 yum 검색으로 효과적으로 검색하는 유일한 방법 은 매우 희미한 결과 yum search all | grep fooyum search foo제공하는 것입니다. 그러나 yum list "foo-*"예상대로 작동하며 결과는 cl-asdf.noarch 패키지 일 것입니다.

관련 yum 버그 리포트를 빠르게 살펴보면 yum 검색에는 다른 단점이있는 것 같습니다 : https://bugs.launchpad.net/percona-server/+bug/580336/comments/2


1

아직 댓글을 달 수 없으므로 답변을 사용해야합니다.

당신은 시도 했 yum search cl-*yum list 'cl-*'? 적어도 yum whatprovides */foo그것은 특별한 경우이지만 파일 이름을 검색하는 데 효과적입니다. 그렇지 않으면 종종 사용
yum list all | grep -i foo하지만 yum의 여러 줄 출력을 조심하십시오. grep은 첫 번째 줄만 표시 할 수 있으므로 아마도yum list all | grep -iA1 foo

맨 페이지의 "목록 옵션"에 유용한 예제도 있습니다. 추가 문서는 직접에서 상류도 가능 http://yum.baseurl.org/http://yum.baseurl.org/wiki/YumCommands : 아니면 직접 파이썬을 통해 http://yum.baseurl.org/wiki/ YumCodeSnippet / YumSearch


내가 해봤 어 yum search cl-*? - 응 나는 했어. 이것은 아무것도 찾지 못합니다 (아마 다른 yum 버전입니까? 여전히 FC18을 사용하고 있습니다).
wvxvw

글쎄,에 대한 의도 된 유스 케이스를 읽음으로써 yum search정규 표현식 / 와일드 카드와 결합하는 것은 이중 중복입니다. yum search이미 퍼지 검색을 수행하므로 와일드 카드를 사용하는 것은 쓸모가 없습니다. 검색을 제한하려면 yum list expression또는을 사용하십시오 yum list all | grep expression. P : 그와 행운 - 그렇지 않으면 나는 당신이 향상 얌에 대한 요청 열 제안
doktor5000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.