솔라리스 grep과 정규식?

솔라리스 grep과 정규식?

우리는 거의 모든 Unix 호환 시스템에서 실행되는 GNUmakefile을 만드는 방법을 찾으려고 노력하고 있습니다. 우리는 사용하고 있지만 egrepMinGW에서는 실패합니다. grep -E그러기 때문에 전환한다보스크, 그러나 테스트 결과 Solaris 11에서는 실패하는 것으로 나타났습니다.

makefile의 일반적인 사용법은 다음과 같습니다.

GREP ?= grep
...

IS_X86 := $(shell uname -m | $(GREP) -v "x86_64" | $(GREP) -i -c -E "i.86|x86|i86")
IS_X64 := $(shell uname -m | $(GREP) -i -c -E "(_64|d64)")

결과 :

grep: illegal option -- E
Usage: grep [-c|-l|-q] -bhinsvw pattern file . . .
grep: illegal option -- E
Usage: grep [-c|-l|-q] -bhinsvw pattern file . . .
...

-E나는 그것을 볼 수 없으며 Posix에서는 -F선택 사항입니다 (아마도 놓쳤을 수도 있습니다). 내가 찾은솔라리스와 POSIX의 차이점스택 오버플로에 있지만 다음과 같이 명시되어 있습니다."Solaris에는 POSIX 인터페이스 전체 세트가 있습니다...".

솔라리스는 왜 grep소비 할 수 없나요 -E? Solaris로 전환하는 것 외에 Solaris에서 정규식 지원을 사용할 수 있는 다른 방법이 있습니까 egrep?


환경을 오염시키지 않았는지 확인하기 위해 Solaris 11.3 시스템에 새 테스트 계정을 설정했습니다.

이 계정이 추가되었습니다:

# useradd -d /export/home/test -m -s /bin/ksh -c "Testing Accoung" test

80 blocks

PATH로그인 후 확인:

test@solaris:~$ echo $PATH
/usr/bin:/usr/sbin

답변1

~에서Oracle Solaris 설명서(XPG)

유용

POSIX.2, POSIX.2a, XPG4, SUS 또는 SUSv2에서 요구하는 동작이 기존 Solaris 유틸리티 동작과 충돌하는 경우 유틸리티의 원래 Solaris 버전은 변경되지 않고 새로운 표준 호환 버전으로 제공됩니다 /usr/xpg4/bin. POSIX.2, POSIX.2a, XPG4, SUS 또는 SUSv2 기능을 활용하려는 애플리케이션의 경우 이러한 사양에 지정된 유틸리티에 대한 다른 디렉터리를 찾기 전에 PATH( sh또는 ksh) 또는 path() 환경 변수를 설정해야 합니다. , , , 그리고 .csh/usr/xpg4/bin/bin/usr/bin/usr/ucb/usr/ccs/bin

확장 정규식을 사용해야 하는 경우에는 /usr/xpg4/bin미리 설정하여 PATH사용하세요 grep -E.

관련 정보