sedy awkson supersets de grep, hay cosas que son más fáciles de hacer con uno u otro.
grep foose puede escribir sed '/foo/!d'o awk /foo/, pero considere:
grep -i footendrí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
grepes una herramienta simple pero tiene modos de operación muy especializados que son más difíciles de reproducir con awko 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 -rpara búsqueda recursiva
- (no estándar)
grep -P/ pcregreppara expresiones regulares de tipo perl (algunas sedimplementaciones tienen soporte de expresiones regulares de tipo perl, aunque no las más importantes)
- (no estándar)
grep -opara devolver la parte coincidente (varias líneas de awko sedpara hacer lo mismo)
- (no estándar)
grep -A/B/Cpara devolver el contexto alrededor del partido (nuevamente doloroso de hacer de manera similar con sedo awk)
sed
s/foo/bar/: sedEl scomando 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
perlcomo 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/ awkobsoleto).
Dominar perlpara hacer procesamiento de texto ofrece una gran ventaja. Recomiendo pasar un tiempo en él, incluso antes de mirar los sedcomandos 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 grepo sedimplementaciones 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 ...