Expressão Regular para “AND”?

2

Digamos que eu tenha lhe fornecido o seguinte texto:

allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_execmem --> off
httpd_read_user_content --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off

O que eu quero fazer é criar uma expressão regular que possa analisar texto como este procurando por duas ou mais palavras na mesma linha. Por exemplo, se eu estivesse procurando por um booleano do SELinux que cobrisse "ftp" E "home" na mesma linha, eu faria o seguinte:

getsebool -a | grep -i ftp | grep -i home

No entanto, estou procurando uma expressão regular que faça a mesma coisa. Especificamente, encontre todas as palavras em qualquer ordem em uma linha ...

    
por Soviero 25.03.2012 / 17:29

2 respostas

4

Talvez algo como

getsebool -a | egrep -i ".*(ftp.*home|home.*ftp).*"

funcionaria para você?

    
por 25.03.2012 / 17:37
5

Você também pode usar o awk. Com o awk você pode facilmente usar construções Booleanas.

getsebool -a | awk '/ftp/ && /home/ {print}'
# case insensitive
getsebool -a | awk 'tolower($0)~/ftp/ && tolower($0)~/home/ {print}'
    
por 27.03.2012 / 18:53

Tags