Historicamente, esses switches foram fornecidos em binários separados. Em alguns sistemas Unix realmente antigos, você descobrirá que precisa chamar os binários separados, mas em todos os sistemas modernos os switches são os preferidos. A man page do grep tem detalhes sobre isso.
Quanto ao que eles fazem, -E
alterna grep para um modo especial para que a expressão seja avaliada como ERE (Extended Regular Expression) em oposição à correspondência de padrão normal. Detalhes dessa sintaxe estão na página man.
-E, --extended-regexp
Interpret PATTERN as an extended regular expression
A opção -F
alterna grep para um modo diferente no qual aceita um padrão para corresponder, mas divide esse padrão em uma cadeia de pesquisa por linha e faz uma pesquisa OR em qualquer uma das sequências sem fazer nenhuma correspondência especial de padrão .
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched.
Aqui estão alguns cenários de exemplo:
-
Você tem um arquivo com uma lista de, digamos, dez nomes de usuários Unix em texto simples. Você deseja pesquisar o arquivo de grupo em sua máquina para ver se algum dos dez usuários listados está em grupos especiais:
grep -F -f user_list.txt /etc/group
A razão pela qual a opção
-F
ajuda aqui é que os nomes de usuários no arquivo padrão são interpretados como strings de texto simples. Pontos, por exemplo, seriam interpretados como pontos e não como curingas. -
Você deseja pesquisar usando uma expressão sofisticada. Por exemplo, parênteses
()
podem ser usados para indicar grupos com|
usado como um operador OR. Você poderia executar essa pesquisa usando-E
:grep -E '^no(fork|group)' /etc/group
... para retornar linhas que começam com "nofork" ou "nogroup". Sem a opção
-E
, você teria que escapar dos caracteres especiais envolvidos, pois, com a correspondência normal de padrões, eles procurariam apenas o padrão exato;grep '^no\(fork\|group\)' /etc/group