awk regex corresponde errado?

1

Brincando com o awk notei esse comportamento:

[root@ror6ax3 ~]# grep open * | awk '$2 ~ /opens*/ {print $0}'
install.log:Installing openldap-2.4.23-32.el6_4.1.x86_64
install.log:Installing openssl-1.0.1e-15.el6.x86_64
install.log:Installing openssh-5.3p1-94.el6.x86_64
install.log:Installing openssh-clients-5.3p1-94.el6.x86_64
install.log:Installing openssh-server-5.3p1-94.el6.x86_64
install.log:Installing b43-openfwwf-5.2-4.el6.noarch
[root@ror6ax3 ~]# grep open * | awk '$2 ~ /opens */ {print $0}'
install.log:Installing openssl-1.0.1e-15.el6.x86_64
install.log:Installing openssh-5.3p1-94.el6.x86_64
install.log:Installing openssh-clients-5.3p1-94.el6.x86_64
install.log:Installing openssh-server-5.3p1-94.el6.x86_64

Por que opens* corresponde a openldap ?

    
por kaboom 11.07.2014 / 20:03

1 resposta

3

* significa 0 ou mais, então efetivamente 0 ou mais s caracteres. Existe a documentação aqui , que diz

For example, ph*' applies the*' symbol to the preceding h' and looks for matches of onep' followed by any number of h's. This also matches justp' if no 'h's are present.

No seu caso, você está fazendo opens* enquanto provavelmente espera algo como opens+ , onde + significa "1 ou mais". Confira os documentos no operador + aqui

    
por 11.07.2014 / 20:06