O sed possui um recurso superior ao awk? [fechadas]

3

Recentemente, aprendi sed por um tempo e foi uma experiência desagradável devido a

  • necessidade de lembrar comandos de uma única letra ( p , a , d , ...)
  • o conceito de single mantém espaço para lembrar o contexto - controlado por outros comandos semelhantes ( h , x , g , ...)

Eu disse para mim mesmo: isso não poderia ser mais intuitivo? Ou seja com comandos mais detalhados (por exemplo, print em vez de p ) e mais do que um buffer - variáveis padrão de acordo com minha necessidade (por exemplo, lastUserSeen )?

E então alguém me contou :

No, never use h or any other sed constructs except s, g, and p (with -n) or you are literally using constructs that became obsolete in the mid-1970s when awk was invented. People use those other constructs today strictly for the mental exercise, not to seriously write software, since an equivalent awk solution will be clearer, more efficient, more portable, easier to maintain/enhance, and better in every other meaningful way.

awk? Eu imediatamente pulei e me apaixonei por ele. Muitos dos meus programas multi-linha funcionaram na primeira execução, sem qualquer depuração. Pelo que eu desde então estudei sobre o awk, acho que é capaz de substituir completamente o sed. Ou existe algum recurso sed (que eu perdi) efeito do que não pode ser facilmente alcançado pelo awk? Existe alguma razão pela qual um usuário awk iria executar sed?

Editar: isso não é uma pergunta "o que é melhor", mas uma comparação de conjuntos de recursos. Existe alguma característica no sed sed que não possa ser alcançada de maneira similar no awk, mas precisaria de muito mais código awk?

    
por miroxlav 23.06.2017 / 10:06

2 respostas

2

Para uma maneira rápida e fácil de editar um arquivo, o recurso sed -i é muito mais fácil do que construir algo semelhante usando awk . Aceito que as plataformas que usam gawk na versão 1.4.0 ou posterior tenham o recurso "inplace" para cobrir isso.

sed -i 's/foo/bar/' filename

Relutantemente aprendi sed por causa de todos os scripts existentes que o usam. Com uma escolha, ao escrever um novo script, awk geralmente ganha, o código é muito mais legível + sustentável.

    
por 23.06.2017 / 10:25
1

Na maioria das vezes, o sed é usado para edição básica ( s///g ).
Na maioria das vezes o awk é usado para edição de texto mais complexa.

A razão básica para usar sed ao invés de awk, nos casos em que sed e awk fornecem respostas úteis (simples), é que sed é ~ 100k e o GNU awk é ~ 600k.

O menor carrega mais rápido (às vezes isso é importante).

Os awers mais antigos tendem a ser menores, o mawk é ~ 121k (devemos encontrar um sed antigo para fazer uma comparação razoável).

E há Perl, uma linguagem muito poderosa, muito rápida em alguns usos, mas muito grande para carregar ~ 2 Megabytes. O uso repetido de Perl pode resultar em longos atrasos.

O seu FAQ capítulo 6 fornece recomendações bem escritas e bastante equilibradas sobre quando usar ou evitar o uso de sed, comparado a awk e perl.

    
por 23.06.2017 / 11:21

Tags