Al emitir el docker container ls -la , el resultado se ve así:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox "tail -f /dev/null" 26 seconds ago Up 25 seconds recursing_liskov Me gustaría obtener solo el nombre del contenedor presente en la columna Names .
Mi idea era usar bash para invertir las columnas en la salida del comando para colocar la columna Names en la primera posición y cortar el nombre del contenedor.
Esto es lo que probé:
sudo docker container ls -la | rev |tail -n +2 | tr -s ' ' | cut -d ' ' -f 1Sin embargo, esto no da el resultado esperado y aparece el siguiente error:
rev: stdin: Invalid or incomplete multibyte or wide characterEstoy atascado porque no sé cómo manejar este error. ¿Se puede arreglar para obtener el resultado que espero? ¿O hay alguna otra forma de obtener mi resultado?
En lugar de jugar con una salida predeterminada, simplemente imprima exactamente lo que está buscando desde el principio. La mayoría de los subcomandos de la ventana acoplable aceptan una opción --format que tomará una expresión de plantilla go para especificar lo que desea exactamente.
En su caso, creo que el siguiente comando debería dar lo que está buscando:
$ docker container ls -la --format "{{.Names}}" recursing_liskovPor supuesto, puede agregar más columnas si lo desea, en el orden que mejor se adapte a sus necesidades. Puede obtener fácilmente una lista de todas las claves disponibles con algo como:
$ docker container ls -la --format "{{json .}}" | jq { "Command": "\"tail -f /dev/null\"", "CreatedAt": "2022-01-15 23:43:54 +0100 CET", "ID": "a67f0c2b1769", "Image": "busybox", "Labels": "", "LocalVolumes": "0", "Mounts": "", "Names": "recursing_liskov", "Networks": "bridge", "Ports": "", "RunningFor": "20 minutes ago", "Size": "0B (virtual 1.24MB)", "State": "running", "Status": "Up 20 minutes" }Aquí hay un ejemplo solo para ilustrar el uso de algunos de los campos:
$ docker container ls -la --format "container {{.Names}} is in state {{.State}} and has ID {{.ID}}" container recursing_liskov is in state running and has ID a67f0c2b1769Algunas referencias aleatorias de varias que usé:
No estoy seguro de haber entendido tu pregunta, pero si solo quieres reorganizar el orden de las columnas, puedes usar awk y su función printf . No es la forma más elegante, pero dependiendo de su caso de uso, podría funcionar para usted.
Por ejemplo, puede usar lo siguiente para un comando de salida de dos columnas:
cmd | awk '{printf ("%s\t%s\n", $1, $2)}'De la misma manera, podrías hacer:
docker container ls -la | awk '{printf ("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", $8, $1, $2, $3, $4, $5, $6, $7)}' Como dije, esto puede considerarse una solución sucia, pero no estoy seguro de lo que exige su caso de uso. Tenga en cuenta que la primera fila con el nombre de las columnas no será tan bonita como lo es de forma predeterminada. Puede arreglar eso dando a cada uno de los elementos un ancho (máximo) ( %5s establece un ancho de 5).