sede awksão superconjuntos grep, existem coisas que são mais fáceis de fazer com um ou outro.
grep foopode ser escrito sed '/foo/!d'ou awk /foo/, mas considere:
grep -i footeria que ser, a sed '/[fF][oO][oO]/!d'menos que você queira considerar extensões não-padrão como as GNU sed '/foo/I!d'. Ou com awk: awk 'tolower($0) ~ /foo/'ou novamente usando uma extensão GNU: awk -v IGNORECASE=1 /foo/.
Coisas nas quais as diferentes ferramentas são boas e complicadas com as outras ferramentas:
grep
grepé uma ferramenta simples, mas possui modos de operação muito especializados, mais difíceis de reproduzir com awkou sed:
grep -i para correspondência sem distinção entre maiúsculas e minúsculas (veja acima)
grep -Fe "$string"para pesquisa de cadeia fixa ( export string; awk 'index($0, ENVIRON["string"])'com awk, sem equivalente direto com sed).
- (não padrão)
grep -rpara pesquisa recursiva
- (não padrão)
grep -P/ pcregreppara regexps do tipo perl (algumas sedimplementações têm suporte para regexp do tipo perl, embora não sejam as principais)
- (não padrão)
grep -opara retornar a parte correspondente (várias linhas awkou sedfazer o mesmo)
- (não padrão)
grep -A/B/Cpara retornar o contexto durante a partida (novamente doloroso de fazer da mesma maneira com sedou awk)
sed
s/foo/bar/sedO scomando :: possui recursos difíceis de implementar, awkcomo:
s/foo\(.*\)bar/\1/g: captura (embora o GNU awk tenha uma gensub()extensão para isso)
s/foo/bar/3: substitua a 3ª ocorrência em cada linha
- (não padrão): edição de arquivos no local (embora agora também seja suportado pelo GNU
awk).
awk
awk é o mais rico em recursos dos três.
- bom para lidar com números
- bom para lidar com entrada formatada em colunas.
- bom para extrair e combinar dados de diferentes fontes, com suas matrizes associativas.
perl
perlcomo uma ferramenta prática de extração e relatório, tem o melhor de todos. Foi para isso que ele foi projetado inicialmente (para ser a ferramenta que torna todos aqueles sed/ awkobsoletos).
O domínio perldo processamento de texto oferece uma vantagem séria. Eu recomendo dedicar algum tempo, mesmo antes de olhar para os sedcomandos menos comuns, por exemplo.
desempenho
Como regra geral, quanto mais especializada for a ferramenta, mais eficiente ela estará na tarefa. Mas isso também depende muito da implementação, a tarefa e alguns outros fatores e desempenho podem ter trocas que podem precisar ser levadas em consideração.
Por exemplo, há alguns grepou sedimplementações que são muito rápido, mas, por exemplo, eles não suportam caracteres de vários bytes por isso só pode funcionar corretamente em texto US-Inglês em locais de vários bytes. Ou são rápidos porque trabalham em um pequeno buffer de tamanho fixo e, portanto, não podem funcionar com entradas arbitrárias ...