Utilicé sed para un lote de ptovess donde no pude hacerlo con awk. ¿Debería haberlo hecho? O es más una cuestión de elección y llamada awk y sed equivalente para el uso. Ambos hacen la búsqueda común reemplazar similar con E/S. ¿Hay un buen ejemplo de lo que no se puede hacer con uno que el otro puede?¿Qué puede hacer eso que sed no puede hacer?
Respuesta
Una diferencia principal es que un programa awk puede mantener el estado y puede operar utilizando múltiples pases sobre los mismos datos. Una invocación de sed es necesariamente de paso único sin estado porque sed (Stream EDitor) está inherentemente orientado a flujos. La ventaja, sin embargo, es que esto hace que sed sea más simple y más apropiado para usar en cadenas de tuberías.
SED es un editor de flujo, y por lo tanto no tiene variables y algunos otros constructos como AWK. AWK es un lenguaje completamente desarrollado.
¿AWK, a diferencia de sed, es bueno para buscar y reemplazar dado cualquier código Unicode o Ascii? por lo tanto, tratar a todos los personajes de control, incluida la nueva línea, EOF, e.t.c. como binario? – barlop
G'day,
Awk es más potente. sed tiende a ser más limitado en lo que puede hacer.
Sed es bueno para los cambios de datos basados en línea. Tiene algunas construcciones simples de bucle, las cosas típicas de expresiones regulares ed/ex/vi y cosas de sustitución, declaraciones compuestas, decisiones, etc. La mayoría de la gente lo usa para modificar los datos canalizados.
Awk es bueno para filtrar o reorganizar datos. Se usa principalmente para informar.
Sugiero echar un vistazo al excelente libro de Dale Dougherty "sed & awk" (sanitised Amazon link). Por cierto, tiene una de las mejores explicaciones de las expresiones regulares allí.
¡Muchas personas dirían usar Perl de todos modos! (-:
Editar: olvidaba decir que el lenguaje awk es bastante C como el que no es sorprendente dado que la 'k' en AWK significa Brian Kernighan Sí Eso Brian Kernighan
..!Además, sed sólo funciona en flujos de datos mientras que awk trabaja en ambas corrientes y archivos de datos.
HTH
vivas, sed sólo funciona en flujos de datos mientras que awk trabaja en ambas corrientes y archivos de datos.
GNU sed en realidad admite la edición de archivos en el lugar. –
Sí.Pero, como dices, la opción -s es específica de GNU. Las implementaciones de Vanilla sed se basan en flujos. Eso es. –
En el original (y sigue siendo el mejor) libro, The AWK Programming Language, los siguientes se implementa (entre muchas otras cosas):
- un ensamblador sencilla
- descendente recursivo compilador
- una indexación de texto programa
Intenta hacer eso con sed.
Creo que esta es la respuesta a una pregunta completamente diferente. La pregunta es "¿Qué es lo que no puede hacer ese sed?", No "¿qué puede hacer ese sed?". Simplemente decir que "awk es mejor, más fuerte, más rápido" no responde la pregunta en absoluto. –
Lo único que se me ocurre es que sed puede hacer pequeños cambios en menos char cuenta el awk. Entonces, para ajustes rápidos en un shell en vivo, es más rápido escribir.
- 1. ¿Qué puede hacer Devise que Authlogic no puede?
- 2. En desarrollo web: ¿Qué ASP.net puede hacer que PHP no puede hacer?
- 3. ¿Qué se puede hacer en Cpython que no se puede hacer en IronPython?
- 4. ¿Qué puede hacer GlStencil?
- 5. ¿qué puede hacer que pdb.set_trace() sea ignorado?
- 6. ¿Puede XSLT hacer todo lo que CSS puede hacer?
- 7. ¿Qué puede hacer que cambie Oracle ROWID?
- 8. ¿Mocking ChildProperty no puede hacer que funcione?
- 9. No se puede hacer que Resque funcione
- 10. ¿Qué puede hacer que SqlClient reutilice las conexiones no válidas?
- 11. ¿Qué puede hacer Phing que Ant no pueda?
- 12. ¿Qué diseño puede hacer esto?
- 13. ¿Qué puede hacer que falle el ejecutivo? ¿Qué pasa después?
- 14. sed - cómo hacer grupos regex usando sed
- 15. ¿Qué puede hacer Pygame en términos de gráficos que wxPython no puede?
- 16. Qué puede hacer que ViewData.ModelState.IsValid se vuelva falso
- 17. ¿Qué puede hacer que node.js imprima y se elimine?
- 18. ¿Qué puede hacer que Java siga funcionando después de System.exit()?
- 19. gdb: Significado del error tstart "No puede hacer eso cuando su destino es 'exec'"
- 20. ¿Qué puede hacer que CGDisplayCreateImageForRect capture o ignore el cursor?
- 21. ¿Qué puede hacer que D3D11CreateDevice() falle con E_FAIL?
- 22. No se puede hacer que cProfile funcione en IPython
- 23. ¿Qué se puede hacer con AppleScript?
- 24. Qt :: ¿Qué tan pequeño se puede hacer?
- 25. No se puede hacer que la tubería de Scrapy funcione
- 26. ¿Qué puede hacer Boo por ti?
- 27. No se puede hacer que UJS funcione en Rails 3.1
- 28. Qué hacer cuando no puede guardar una contraseña como hash
- 29. ¿Puede Autofac hacer autoaglomeración automática?
- 30. No se puede ejecutar Makefile.am, ¿qué debo hacer?
No veo que sed sea "más apropiado para usar en cadenas de tuberías", simplemente porque awk PUEDE realizar múltiples pasadas, nada te obliga a hacerlo realmente. Para muchas tareas relacionadas con las tuberías (seleccionar campos específicos, por ejemplo) awk es mucho más fácil de usar que sed. –
@anon Me parece extraño cómo está convirtiendo este hilo en algo "awk vs sed". No es útil en absoluto. – ata
Cambié esto a la respuesta aceptada. ¡Gracias! –