sed e awk são superconjuntos de grep , há coisas que são mais fáceis de fazer com um ou outro.
grep foo pode ser escrito sed '/foo/!d' ou awk /foo/ , mas considere:
grep -i foo teria que ser sed '/[fF][oO][oO]/!d' , a menos que você queira considerar extensões não padrão como sed '/foo/I!d' do GNU. Ou com awk : awk 'tolower($0) ~ /foo/' ou novamente usando uma extensão GNU: awk -v IGNORECASE=1 /foo/ .
Coisas em que as diferentes ferramentas são boas e incômodas com as outras ferramentas:
grep
grep é uma ferramenta simples, mas tem modos de operação muito especializados que são mais difíceis de reproduzir com awk ou sed :
-
grep -ipara correspondência insensível a maiúsculas e minúsculas (veja acima) -
grep -Fe "$string"para pesquisa de sequência fixa (export string; awk 'index($0, ENVIRON["string"])'comawk, sem equivalente direto comsed). - (não padrão)
grep -rpara pesquisa recursiva - (não padrão)
grep -P/pcregreppara expressões regulares semelhantes a perl (algumassedimplementações têm suporte a expressão regular perl, embora não sejam as mais importantes) - (não padrão)
grep -opara retornar a parte correspondente (várias linhas deawkousedpara fazer o mesmo) - (não padrão)
grep -A/B/Cpara retornar o contexto em torno da correspondência (mais uma vez doloroso de se fazer de maneira semelhante comsedouawk)
sed
-
O comando
s/foo/bar/:sedspossui recursos que são difíceis de implementar emawk, como: -
s/foo\(.*\)bar//g: capturando (embora o GNU awk tenha uma extensãogensub()para isso) -
s/foo/bar/3: substitua a terceira ocorrência em cada linha - (não padrão): edição de arquivos no local (embora também seja suportada pelo GNU
awkagora).
awk
awk é o recurso mais rico dos três.
- bom para lidar com números
- bom para lidar com entradas formatadas em colunas.
- bom para extrair e combinar dados de diferentes fontes, com suas matrizes associativas.
perl
perl como uma ferramenta prática de extração e relatórios tem o melhor de todos. Foi para isso que foi inicialmente projetado (para ser a ferramenta que torna todos aqueles sed / awk obsoletos).
Masterizar perl para processar texto dá uma grande vantagem. Eu recomendo gastar algum tempo nisso, mesmo antes de olhar para os comandos sed menos comuns, por exemplo.
desempenho
Como regra geral, quanto mais especializada for a ferramenta, mais eficiente será a tarefa. Mas isso também depende muito da implementação, a tarefa e alguns outros fatores e desempenho podem ter trade-offs que talvez precisem ser levados em conta.
Por exemplo, há algumas implementações grep ou sed que são muito rápidas, mas, por exemplo, não suportam caracteres multibyte, portanto, só funcionam corretamente em texto em inglês dos EUA em localidades com vários bytes. Ou eles são rápidos porque funcionam em um pequeno buffer de tamanho fixo e, portanto, não podem funcionar em entradas arbitrárias ...