2011-05-06 4 views
6

의 파일에 grep 2 패턴을 넣으려는 경우 Solaris UNIX.Solaris - grep (OR 기능 포함)

grep '패턴 1 또는 패턴 2'파일 이름입니다.

다음 명령이 작동하지 않습니다

grep 'pattern1\|pattern2' filename

이 명령에 어떤 문제가 있습니까?

참고 : 내가 나를 위해 좋은 일을 명령 솔라리스

답변

0

에입니다. 플랫폼 및 사용중인 정규 표현식 및 파일 내용과 같은 추가 정보를 추가하십시오 (문제를 재현하는 가장 작은 예제로 최소화하십시오). (귀하의 게시물에 댓글을 달았지만 평판이 충분하지 않습니다.)

+1

패턴은 단순히 단어이며 유닉스 솔라리스 머신에서 작동합니다. – user742004

0

정확해야합니다. 'pattern1 \ | pattern2'와 'pattern1 \ | pattern2'의 적절한 공백을 추가했는지 확인하십시오.

사례에 문제가있는 것이 아니라고 확신하십니까? -i 스위치를 시도하십시오.

+1

'\ |'Solaris에서 작동하지 않습니다 ... – jahroy

0

이는 pattern1과 pattern2의 정의에 따라 다릅니다. 단어가 맞다면 제대로 작동 할 것입니다. 그렇지 않으면 다음을 필요로합니다.

grep '\(pattern1\)\|\(pattern2\)' 
+0

패턴은 단지 단어이며 알 수없는 이스케이프 시퀀스 '\ |' – user742004

+0

Solaris에서'\ |'가 작동하지 않습니다 ... – jahroy

15

어떤 운영 체제를 사용하고 있습니까?

GNU grep이있는 시스템에서는 작동하지만 BSD, Solaris 등에서는 \|이 지원되지 않습니다.

egrep 또는 grep -E으로 시도해보십시오.

egrep 'pattern1|pattern2' 
+0

egrep이 제대로 작동합니다. 감사 – user742004

2

당신이 POSIX 기능 (예 : 리눅스와 같은 동작을) 원하는 경우에 당신은 경로의 시작 부분에 POSIX 2 호환 바이너리를 넣을 수 있습니다 :

$ echo $PATH 
/usr/xpg4/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:[...] 

이도는/usr/xpg6을 인 POSIX 1 호환 가능합니다.

/usr/bin: SVID/XPG3 
/usr/xpg4/bin: POSIX.2/POSIX.2a/SUS/SUSv2/XPG4 
/usr/xpg6/bin: POSIX.1-2001/SUSv3 
0

fgrep 이용한 비전있어서 솔라리스 10 일 (즉, 고정 스트링) ...

되도록 개행 문자로 구분 패턴 아직 인용 패턴리스트를 제공 한 단어로 쉘에 의해 해석 : -

fgrep 'pattern1 
pattern2' filename 

이 방법은 작동 grep, fgrep/usr/xpg4/bin에서 egrep, 파이프로 구분 된 ERE 비록 어떤에 대한은 때로는 가장 까다 롭습니다.

셸이 기록 편집을 허용하는 경우 문자열에 임의의 개행 문자를 삽입 할 수 있습니다. 예 : bashC-v C-j 이맥스 모드 또는 vi 명령 모드에서 발생합니다.