재귀 검색은 solaris의 grep에서 작동하지 않습니다


20

Solaris 서버에서 grep -r작동하지 않는 것으로 나타났습니다 grep. 이것이 제가 사용하는 일반적인 방법입니다 . egrep같은 동작을하는 것 같습니다 .

기계를 제어 할 수 없기 grep때문에 재귀 검색 을 수행하는 방법이 있습니까? 아니면 내가 파이프의 출력이 필요합니까 find로를grep ?


1
어떤 Solaris 릴리스를 사용하고 있습니까?
jlliagre 2016

답변:


4

솔라리스에 익숙하지는 않지만 GNU / 리눅스에서 솔라리스로 전환하면 대부분의 명령이 약간 다르게 동작한다는 것을 알 수 있습니다. 유닉스 도구의 GNU 버전에는 "독점"유닉스에없는 추가 기능이 있습니다.

여기에서 GNU grep을 다운로드 할 수 있습니다 한 다음 컴파일하고 설치할 수 있습니다.

루트 액세스 권한이 있으면 configure --prefix = / usr / local을 실행하여 유틸리티가 / usr / local에 설치되도록 할 수 있습니다.

루트 액세스 권한이 없으면 configure --prefix = $ {HOME}을 실행하여 유틸리티를 홈 디렉토리에 설치하십시오.


--prefix=${HOME}}/.local아마 더 좋습니다 ...와 홈 디렉토리를 복잡하게 할 필요가 없습니다 sharelib폴더
jpaugh

1
한 사람이 어수선 해지면 다른 사람이 조직됩니다
bsd

의심의 여지가 없습니다! 솔직히, 나는 "" share정말 디렉토리가되어야합니다! " rm -rf도!
jpaugh

31

을 사용하려면 find이것이 가장 빠른 방법입니다.

find . -type f -exec grep pattern {} +

그러나 Gnu grep은 이미 컴퓨터에 설치되어있을 가능성이 큽니다.

의 Solaris 11 기본 설치의 일부입니다 /usr/gnu/bin/grep. 에서 찾을 수있는 Solaris 10의 경우와 동일합니다 /usr/sfw/bin/ggrep. 이전 릴리스에서, 그것은 sunfreeware 또는 다른 저장소, 검사에서 설치되었을 수 있습니다 /usr/local/bin/grep/opt/csw/bin/grep일반적인 위치에 대한.


-name옵션을 사용할 수도 있습니다 find.
sleepyweasel

@sleepyweasel -name은 파일 내부를 검색하지 않지만 OP가 요구하지 않는 파일 이름 만 검색합니다.
jlliagre

6

ggrep 이 설치되어 있으면 대신 사용하십시오 .

예 : 현재 디렉토리에서 모든 하위 디렉토리 ( -R) 까지 "mysearchstring"을 검색하고 일치하는 파일 이름과 경로 ( -H)를 표시하고 이진 파일 ( -I)은 무시하십시오 . *명령의 끝을 잊지 마십시오 .

/usr/sfw/bin/ggrep -H -R -I "mysearchstring" *

ggrep is in /usr/sfw/bin EXPORT 명령을 사용하여 프로파일에 추가하여 명령 행에서 직접 호출 할 수 있습니다.

PATH=$PATH:/usr/sfw/bin
export PATH

Solaris 버전 : SunOS 5.10 Generic_147440-13 sun4u sparc SUNW, SPARC-Enterprise


1
적어도 내 시스템에서는 ggrep실제로 GNU grep입니다. 감사!
jpaugh

3

http://betterthangrep.com/ack 에서 독립형 perl 스크립트를 다운로드 하여$HOME/bin 사용하는 방법을 배우십시오. 나는 그것이 일상적인 개발 작업에서 많은 용도로 grep보다 광고하는 것보다 낫다는 것을 알았습니다.


3

Solaris grep에는 없습니다 -r 옵션 .

다음 명령을 사용할 수 있습니다.

find . -type f | xargs grep 'sometext'

2
GNU grep을 컴파일하고 홈 디렉토리의 어딘가에 설치하기 위해 "시스템 제어"가 필요하지 않습니다.
Keith Thompson

@KeithThompson 고맙습니다. 내 답변을 수정했습니다.
Sachin Divekar

이름 패턴과 일치하는 모든 파일을 찾고 파일과 결과를 표시하는 데 매우 유용합니다. 예 : find /opt/ -name "*.sh" -type f | xargs grep "start"
Underverse

1

예, GNU grep이 필요합니다. 당신의 조합으로 동일한 작업을 수행 할 수 있기 때문에 개인적으로는 "-r"플래그를 놓치지 마세요 findgrep 그러나 이것은 솔라리스 상자의 GNU 도구를 사용할 수있는 것은 내가 가장 좋은 방법을 고려할 것입니다 것을 상기시켜줍니다. 그래서 우리는 간다 :

인터넷의 여러 곳에서 소스 코드를 다운로드 한 다음 스스로 구축하는 것은 아닙니다. 필요하지 않습니다. Solaris에서 일반적인 GNU 도구를 사용할 수있게하려면 다음과 같이하십시오.

당신은에있는 경우 솔라리스 10 의 Solaris 10 도우미 디스크를 얻어야한다. 이것은 Sun이 배포했지만 지금 여기에 있습니다 . 개인적으로 나는 항상이 디스크의 내용이나 최소한 가장 중요한 GNU 부분을 설치하는 습관으로 만들 것입니다. 조직의 새 서버에 대해 JumpStart (또는 사용하는 모든 것)의 일부로 만드십시오!

당신은에있는 경우 솔라리스 11 인생은 훨씬 간단합니다. GNU 도구는 일반적으로 기본적으로 설치되지만 모든 도구가 로컬 영역으로 전파되는 것은 아닙니다. Solaris 11의 패키징 시스템 인 IFS는 인생을 훨씬 편하게 해주므로 실제로 Solaris 11로 전환해야합니다 (많은 다른 이유도 있습니다). 어떤 영역에서든 항상 사용할 수 있어야하는 패키지 목록은 다음과 같습니다.

pkg : // solaris / archiver / gnu-tar
pkg : // solaris / developer / gnu-binutils
pkg : // solaris / diagnostic / top
pkg : // solaris / file / gnu-coreutils
pkg : // solaris / file / gnu-findutils
pkg : // solaris / text / gawk
pkg : // solaris / text / gnu-diffutils
pkg : // solaris / text / gnu-grep
pkg : // solaris / text / gnu-sed

개발 / 빌드 목적으로 호스트를 사용하는 경우 다음을 추가 할 수 있습니다.

pkg : // solaris / developer / build / gnu-make
pkg : // solaris / developer / build / make
pkg : // solaris / developer / gcc-45
pkg : // solaris / system / header
pkg : // solaris / developer / build / autoconf
pkg : // solaris / developer / build / automake-110

개인적으로 위의 (잠재적으로 개발 도구는 적음) 새 서버 / 영역에 대한 회사 기본 설치의 일부로 만들 것입니다. Solaris sysadmins는 종종 Linux 세계와 다른 점을 고집하지만 실제로는 그럴 필요가 없습니다. 그렇게하고 기본 설치의 일부로 만드십시오. 후회하지 않을 것입니다.


내가 '기계에 대한 통제권이 없다'고 말한 부분을 읽었는지 잘 모르겠습니다. 이것은 누군가에게 유용한 정보라고 확신하지만, 내가 묻는 질문에 대한 대답은 거의 없습니다. .
Eric Wilson

sysadmin에 대한 정보입니다. 그는 당신에게 절름발이 기계 IMHO를 주었다. 이러한 것들이 기본적으로 설치되어야합니다. 그러나 네, 맞습니다. 정보는 아마도 이곳에 와서 질문을 읽는 다른 사람들을위한 것입니다. 오늘은 GNU grep이 없어지고 내일은 GNU tar가 없어 질 것입니다. 아직 모르고 있습니다. :-)
peterh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.