Solaris grep e expressões regulares?

1

Estamos tentando encontrar uma maneira de criar um GNUmakefile que funcione em quase todos os compatíveis Unix. Nós estávamos usando egrep , mas ele falhou no MinGW. Mudamos para grep -E porque é Posix , mas o teste mostra que está falhando no Solaris 11.

Um uso típico no 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)")

O resultado é:

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

Não vejo onde -E e -F são opcionais no Posix (talvez eu tenha perdido). Eu encontrei Diferença entre o Solaris e o POSIX no Stack Overflow, mas ele afirma, "O Solaris tem um conjunto completo de POSIX interfaces ... ".

Por que o grep do Solaris não consome -E ? Existe uma maneira de envolver o suporte à expressão regular no Solaris além de alternar para egrep ?

Acabei de configurar uma nova conta de teste na máquina Solaris 11.3 para garantir que não estragasse o ambiente.

A conta foi adicionada com:

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

80 blocks

Inspeção de PATH após o login:

test@solaris:~$ echo $PATH
/usr/bin:/usr/sbin
    
por jww 29.08.2017 / 03:16

1 resposta

7

De os documentos do Oracle Solaris (XPG)

Utilities

If the behavior required by POSIX.2, POSIX.2a, XPG4, SUS, or SUSv2 conflicts with historical Solaris utility behavior, the original Solaris version of the utility is unchanged; a new version that is standard-conforming has been provided in /usr/xpg4/bin. For applications wishing to take advantage of POSIX.2, POSIX.2a, XPG4, SUS, or SUSv2 features, the PATH (sh or ksh) or path (csh ) environment variables should be set with /usr/xpg4/bin preceding any other directories in which utilities specified by those specifications are found, such as /bin, /usr/bin, /usr/ucb, and /usr/ccs/bin.

Se você precisar usar expressões regulares estendidas, defina /usr/xpg4/bin no início de seu PATH e use grep -E .

    
por 29.08.2017 / 05:01

Tags