EDICIóN GENERAL
57 meneos
942 clics
Este envío tiene varios votos negativos. Asegúrate antes de menear
jq, el sed del siglo XXI

jq, el sed del siglo XXI

sed es una herramienta presente en cualquier sistema UNIX. Se trata de un editor de texto en modo streaming. Aunque sed es una herramienta muy potente, con un lenguaje de programación propio que es Turing completo, la mayor cantidad de usos son sustituir o extraer datos usando expresiones regulares y los comandos s y p. jq es sed para el siglo XXI porque trabaja de forma nativa con JSON, es decir, trabaja con objetos, no con texto plano.

| etiquetas: jq , json , sed , expresión regular , editor de texto , editor de json
JSON, el formato de esta década y en la que viene se pondrá de moda otro distinto. Mientras tanto sed seguirá ahí
#1 no te engañes, sed sigue vivo porque siempre está disponible en cualquier UNIX-like, sobre todo en una época donde internet era mucho más precario, pero usar sed con "formatos modernos" (sea JSON o lo que venga después) es un suplicio por su manía de ir línea a línea, en vez de analizar el documento "como un todo". Además el lenguaje de programación de sed es lo más parecido a brainfuck que he visto. ¿Cuánta gente al final recuerda la diferencia entre el comando h y H y entre el x y X?
#3 ¿Cuánta gente al final recuerda la diferencia entre el comando h y H y entre el x y X?

Pues la que lo usa habitualmente y la que sabe mirar la ayuda ;) O crees que un comando nuevo no a a tener variables que aprender y recordar?

Una de las ventajas fundamentales de de UNIX es poder trabajar con archivos de texto plano.
#5 ¿Para que te crees que se creó el comando "man", criaturita? Como si todo el mundo tuviese memorizado el Red Team Field Manual... algunos tenemos vida ademas de consola de comandos.
#20 Pues... no es eso lo que he dicho?
#21 centrate en la noticia.
#3 sed sigue vivo por que es util. Y el que lo usa lo seguira usando. Esto de jq y demás no lo va a sustituir de momento.
#3 El texto plano no es "un formato moderno"?
#11 ¿Lo preguntas en serio?
#25 Por supuesro. El texto plano te parece que "no es moderno" y el JSON sí?....

Porque manda huevos....
#26 El texto plano puede ser cualquier cosa, tenga estructura o no. JSON al menos impone una cierta estructura, lo que hace más sencillo trabajar con cualquier documento mínimamente complejo. No es tan difícil de entender, creo yo.
#30 No. No es difícil de entender. Por eso es raro leer eso de " pero usar sed con "formatos modernos" (sea JSON o lo que venga después) es un suplicio"
#31 Vamos a ver, que hay que explicarlo todo.

grep, sed y awk son herramientas basadas en expresiones regulares, que procesan los ficheros de texto línea a línea. JSON es un formato de serialización de objetos, posiblemente anidados. Es matemáticamente imposible analizar una estructura recursiva mediante expresiones regulares. La jerarquía de Chomsky, el lema del bombeo, y esas cosas que se estudian en la carrera. Te pueden servir para tareas muy sencillas, como buscar o sustituir una determinada palabra, pero ya está, para tareas más complejas necesitas herramientas más potentes.
#32 Tampoco puedes generar animaciones 3D con el vim. ¿Y qué?

De todos modos, decían por ahí que sed era turing-completo.... me pareció raro, pero no conozco sed lo suficiente.
#33 Cierto, sed es Turing completo, se me olvidó esa parte. Pero también lo son el Juego de la Vida, las cartas Magic, y el PowerPoint. Muchos lenguajes y herramientas son Turing-completos por accidente, lo que no quiere decir que sea útil o sencillo utilizarlos de esa manera.
#3 pudiendo usar perl -pe en el 99,9% de sistemas no le veo el sentido a usar ni sed ni awk con sus horrendas sintaxis.
#12 perl no es el mejor contraejemplo de "horrenda sintaxis" precisamente...
#18 ciertamente, pero para one liners con expresiones regulares es mucho más simple que awk y sed.
#22 No, no lo es. Sed hace su trabajo mejor que ningun otro programa que conozca.
#27 nadie ha dicho que no haga bien su trabajo.
#1 si, claro campeón. Vete a filtrar objetos de una lista en YAML o JSON con sed.

Con jq puedes procesar un CSV y hacer filtrados y extracciones complejas que hasta con awk serian un dolor de huevos de hacer. No es sólo para JSON.
#16 JSON no es la panacea. Lo ocurre es que estás adecuando el entorno al fichero de configuración en lugar de al revés.
Por ejemplo si no utilizas JSON es mucho más sencillo definir variables incluyendo un fichero de texto plano en un script que si utilizas JSON.

Imagina un script de arranque/parada de un demonio en /etc/init.d
¿Cuanto complica el script utilizar un fichero de configuración en JSON en lugar de los tipicos ficheros en texto plano con las variables y comentarios?
Acabarías con que la parte dedicada a leer el JSON es más grande que el propio script de arranque/parada.
Hay que tener valor para hablar en informática de lo que sea del siglo... a principios de siglo.
#2 Donde va el principio de siglo...
Objetos en lugar de strings, lo que ya venía haciendo el powershell :troll:
#6 Algo que le hace mucha falta al mundo Unix. Lo de que todo sean ficheros de texto plano está muy bien sobre el papel, en la práctica es un putísimo coñazo.
Todas las imágenes están rotas.
Antes que enseñar jq mejor aprende sobre configurar un servidor web.
#29 autor aquí. Gracias por avisar. Sé perfectamente configurar un servidor web, lo que ha pasado es que ha habido un error físico en la red de mi casa (el blog corre sobre unas raspberrys) y no he podido repararlo porque estaba en el pueblo de mis padres. Te agradecería que en el futuro no hicieses suposiciones sobre lo que sé o no sé tan a la ligera
Es decir una herramienta engorrosa para los que no saben
#15 comentario cuñadete de la mañana... a ver, tu qué usarías, experto de la vida?
#17 Yo uso en general de forma preferente el awk y el sed cuando no me queda más remedio para hacer algunas cosas. La mayoría es para hacer manipulaciones textuales básicas y ganar rapidez, el problema es que estas herramientas se usan para agilizar la presentación de la forma del texto, y para que tenga sentido tiene que ser rápido, si has de rellenar un json etc no tiene sentido.
Ya está el flame del dia año,
voto por los buenos tiempos de meneame donde la mayoria de las discusiones eran de este tipo.
Esto que es, como el vi?
#8 sed es comando para búsqueda y reemplazo de cadenas de texto dentro de un fichero, vendría a ser parecido al %s de vi pero desde la línea de comandos directamente.
Por lo que entiendo de los comentarios (efectivamente, no me he leído el envío), jq vendría a ser una especie de sed, pero pensado para ficheros json (definición de objetos en javascript), es decir, que en lugar de búsqueda y reemplazo por línea, como hace sed, lo haría por objeto javascript.
Tiene buena pinta, me quedo con lo que dice al final de combinarlo con curl y poder consumir web services desde un script sin más programación.
Estupido meneame, se desplazó el scroll y voté irrelevante sin querer. Sorry
Impresionante

menéame