egrep não funciona como esperado no sistema SunOS

1

Aqui está o que eu quero alcançar no SunOS:

Apenas o padrão como [text_text=text] , [text=text] , [text] ou text são padrões válidos, em que text significa tudo em 0-9,a-z,A-Z, space, newline, tab, enter . Qualquer coisa diferente disso é um padrão inválido. isto é, egrep -v deve capturá-lo. Padrões como [[[text] , [text]]] , [text , text] também devem ser inválidos

Eu usei o abaixo na caixa Linux (RHEL) e funciona perfeitamente:

egrep -v "^[ ]*([a-zA-Z0-9\t\n\v\f\r ]*|\[{1}[_a-zA-Z0-9\t\n\v\f\r ]*(=[a-zA-Z0-9\t\n\v\f\r ]*)?\]{1})[ ]*$" file1

Arquivo1:

[FEATURE_ID=2]
[FEATURE_REV=1]
[NO_OF_BYTES=18]
001203658080400160b9d0ae45000080
[CRC]
c068

No RHEL BOX, a instrução egrep -v acima não fornece nenhuma saída como esperado

Como posso conseguir isso no Solaris, pois o mesmo não funciona e fornece uma saída:

[FEATURE_ID=2]
[FEATURE_REV=1]
[NO_OF_BYTES=18]
[CRC]
    
por dig_123 29.04.2016 / 22:10

1 resposta

2

Como é frequentemente o caso no Solaris, /usr/bin/egrep é uma implementação legada que não é compatível com POSIX, enquanto /usr/xpg4/bin/egrep é uma implementação compatível com POSIX e tem pouco ou nada além de POSIX. A menos que você esteja executando aplicativos do Solaris legados nos dias anteriores ao POSIX, certifique-se de que /usr/xpg4/bin esteja antes de /usr/bin em seu $PATH .

As ferramentas GNU (que você está acostumado no Linux) muitas vezes têm muitos recursos além do que o POSIX exige. Se você precisar de portabilidade, atenha-se ao POSIX. POSIX não define egrep ; é um sinônimo generalizado de grep -E , ou seja, grep com sintaxe de expressão regular estendida .

O /usr/bin/egrep do Solaris não suporta {…} contagens de ocorrências. Você está apenas usando {1} aqui, o que não tem efeito, então solte-o.

Nenhuma implementação de egrep ou grep -E no Solaris oferece suporte a escapes de contrabarra para caracteres de controle. Essa é uma extensão do GNU. POSIX deixa indefinido o backlash-letter. Use a classe [:space:] em vez de \t\n\v\f\r .

LC_CTYPE=C grep -Ev '^[ ]*([[:alnum:][:space:]]*|\[[_[:alnum:][:space:]]*(=[[:alnum:][:space:]]*)?\])[ ]*$' file1
    
por 30.04.2016 / 02:45