sed
y awk
son supersets de grep
, hay cosas que son más fáciles de hacer con uno u otro.
grep foo
se puede escribir sed '/foo/!d'
o awk /foo/
, pero considere:
grep -i foo
tendría que serlo a sed '/[fF][oO][oO]/!d'
menos que desee considerar extensiones no estándar como las GNU sed '/foo/I!d'
. O con awk
: awk 'tolower($0) ~ /foo/'
o usando de nuevo una extensión de GNU: awk -v IGNORECASE=1 /foo/
.
Cosas en las que las diferentes herramientas son buenas y engorrosas con las otras herramientas:
grep
grep
es una herramienta simple pero tiene modos de operación muy especializados que son más difíciles de reproducir con awk
o sed
:
grep -i
para la coincidencia entre mayúsculas y minúsculas (ver arriba)
grep -Fe "$string"
para búsqueda de cadena fija ( export string; awk 'index($0, ENVIRON["string"])'
con awk
, sin equivalente directo con sed
).
- (no estándar)
grep -r
para búsqueda recursiva
- (no estándar)
grep -P
/ pcregrep
para expresiones regulares de tipo perl (algunas sed
implementaciones tienen soporte de expresiones regulares de tipo perl, aunque no las más importantes)
- (no estándar)
grep -o
para devolver la parte coincidente (varias líneas de awk
o sed
para hacer lo mismo)
- (no estándar)
grep -A/B/C
para devolver el contexto alrededor del partido (nuevamente doloroso de hacer de manera similar con sed
o awk
)
sed
s/foo/bar/
: sed
El s
comando tiene características que son difíciles de implementar en awk
:
s/foo\(.*\)bar/\1/g
: captura (aunque GNU awk tiene una gensub()
extensión para eso)
s/foo/bar/3
: reemplaza la tercera aparición en cada línea
- (no estándar): edición de archivos en el lugar (aunque ahora también es compatible con GNU
awk
).
awk
awk
es la característica más rica de las tres.
- bueno para tratar con números
- bueno para tratar con entradas formateadas en columnas.
- bueno para extraer y combinar datos de diferentes fuentes, con sus matrices asociativas.
perl
perl
como una práctica herramienta de extracción e informes tiene lo mejor de todos. Para eso fue diseñado inicialmente (para ser la herramienta que hace que todo eso sed
/ awk
obsoleto).
Dominar perl
para hacer procesamiento de texto ofrece una gran ventaja. Recomiendo pasar un tiempo en él, incluso antes de mirar los sed
comandos menos comunes , por ejemplo.
actuación
Como regla general, cuanto más especializada es la herramienta, más eficiente es en la tarea. Pero eso también depende en gran medida de la implementación, la tarea y algunos otros factores y el rendimiento pueden tener compensaciones que pueden necesitar ser tenidas en cuenta.
Por ejemplo, hay algunas grep
o sed
implementaciones que son muy rápidas, pero por ejemplo no admiten caracteres multibyte, por lo que solo pueden funcionar correctamente en texto en inglés de EE. UU. En configuraciones regionales de varios bytes. O son rápidos porque funcionan en un pequeño búfer de longitud fija y, por lo tanto, no pueden funcionar en entradas arbitrarias ...