타겟팅 출력에서 ​​첫 번째 일치 항목만 유지

타겟팅 출력에서 ​​첫 번째 일치 항목만 유지

locate내 시스템에 라이브러리를 구축 해야 하는데 그 이름이 여러 번 검색될 것으로 예상됩니다. 나는 단지 첫 번째 발생을 유지하고 싶습니다.

지금까지 문자열을 줄바꿈으로 분할하는 몇 가지 방법을 시도했지만 locate출력에는 아무 것도 작동하지 않는 것 같습니다.

find도서관이 어디에 있을지 미리 알 수 없어서 이용하지 않았어요 .

이 문제를 처리하는 다른 (더 나은) 방법도 환영합니다.

답변1

출력을 필터링하는 방법에는 여러 가지가 있습니다 locate.

방법 #1 - 명시적이어야 합니다.

특정 버전의 라이브러리를 찾고 있다면 직접 물어보세요 locate.

$ locate libstdc++-3-libc6.2-2-2.10.0.so
/usr/lib/libstdc++-3-libc6.2-2-2.10.0.so

방법 #2 - grep

glibc .so 라이브러리를 찾고 있다면 grep.so에서 이러한 결과만 찾는 데 사용하세요 locate.

$ locate libstdc++ | grep ".so$"
/usr/lib/libstdc++-3-libc6.2-2-2.10.0.so
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libstdc++.so

방법 #3 - 결과의 처음 10개 행만 반환

첫 번째 결과를 찾는 데 더 관심이 있는 경우 head처음 몇 개의 결과만 반환을 사용하세요. head스위치를 사용하여 다른 수의 결과를 직접 반환 할 수 있습니다 -#(더 짧지만 표준이 아닌 결과 -n #).

$ locate glibc | head -8
/usr/lib64/glib-2.0/include/glibconfig.h
/usr/sbin/glibc_post_upgrade.i686
/usr/sbin/glibc_post_upgrade.x86_64
/usr/share/aclocal/glibc2.m4
/usr/share/aclocal/glibc21.m4
/usr/share/doc/glibc-2.12
/usr/share/doc/glibc-common-2.12
/usr/share/doc/glibc-2.12/BUGS

(8줄을 반환하는데, 이는 파일 경로와 반드시 동일할 필요는 없으며 여러 줄로 구성될 수 있습니다. 개행 문자는 파일 이름의 모든 문자만큼 유효하기 때문입니다.)

답변2

RedHat 또는 GNU(Linux 기반 운영 체제에서 가장 일반적인 두 가지)와 같은 일부 구현 locate및 대부분의 BSD에는 다음 옵션이 있습니다.mlocatelocate-l

locate -l1 mylib

locate그렇지 않은 경우 파일 이름에 개행 문자가 포함되어 있지 않다고 가정하고 출력을 다음으로 파이프 해야 합니다 head -n 1(일부 구현에서는 결과를 구분하기 위해 개행 문자 대신 NUL 문자를 사용하는 locate옵션을 지원 하지만 어쨌든 이를 지원합니다).-0-l

관련 정보