Comando de Linux Cut con ejemplos prácticos
El comando de corte se usa en sistemas Linux y Unix para cortar partes y secciones de cada línea de un archivo y escribir el resultado en la salida estándar. Se puede utilizar para cortar partes de una línea por posición de byte, carácter y campo (delimitador).
En este tutorial, aprendemos el comando de corte de Linux con algunos ejemplos prácticos que puede usar en sus actividades diarias de línea de comandos.
Cortar comando y sintaxis
La sintaxis básica del comando de corte es la siguiente:
cut OPTION... [FILE]...
Comprobemos las opciones de corte y sin ninguna opción, el comando de corte no funcionará.
Opciones de corte
-f
: Extraiga especificando un campo. El comando Cortar usa ‘TAB’ como delimitador de campo predeterminado.
-d
: ‘Tab’ es el delimitador predeterminado y con esta opción puede usar un delimitador específico.
-b
: Para extraer especificando un byte. También se puede especificar el rango de bytes.
-c
: Cortar por carácter. Puede ser una lista de números separados por comas o un rango de números separados por un guión (-).
–complement
: Esto complementará la selección
–output-delimiter
: Para cambiar el delimitador de salida use la opción -output-delimiter = «delimiter».
--only-delimited
: Cortar no imprimirá líneas que no contengan delimitadores
Usaremos el siguiente archivo de texto llamado ‘content.txt’ y el archivo / etc / passwd a lo largo de este tutorial para ilustrar nuestros ejemplos.
$ cat content.txt Ubuntu Linux Microsoft Windows OsX El Capitan Unix FreeBSD
Cómo cortar por delimitador
La opción de corte más utilizada es una combinación de -d
y -f
. Básicamente, extraerá contenido basado en delimitadores específicos y campos enumerados.
Por ejemplo, lo siguiente imprime solo el primer campo de cada línea del archivo ‘/ etc / passwd’ usando el delimitador (:).
$ cut -d':' -f1 /etc/passwd root bin daemon adm lp sync shutdown halt mail operator games ...
El siguiente ejemplo donde usamos el espacio («») como delimitador y cortamos el primer campo del archivo llamado ‘content.txt’.
$ cut -d " " -f 1 content.txt Ubuntu Microsoft OsX Unix FreeBSD
Este ejemplo extrae más de un campo de un archivo específico. Aquí extraemos el primer y sexto campo usando el delimitador de dos puntos (:) del archivo ‘/ etc / passwd’ que tiene la cadena ‘/ bin / bash’:
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6 root:/root slax:/home/slax
Para mostrar el rango de campos, especifique el campo de inicio y el campo final separados por un guión (-) como se muestra a continuación:
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7 root:x:0:0:/root:/bin/bash slax:x:1000:1000:/home/slax:/bin/bash
Cómo complementar la selección de salida
Para complementar la lista de campos de selección, utilice --complement
opción. Esta opción utiliza donde seleccionar todos los campos excepto los campos especificados.
En el siguiente ejemplo, el comando imprime todos los campos excepto el segundo campo en el archivo from ‘/ etc / passwd’:
$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -f2 root:0:0:root:/root:/bin/bash
Cómo especificar un delimitador de salida
Para especificar el delimitador de salida, utilice el --output-delimiter
opción. El delimitador de entrada se especifica mediante -d
opción y, por defecto, el delimitador de salida es el mismo que el delimitador de entrada.
Primero revisemos la salida sin usar el delimitador de salida de la siguiente manera:
$ cut -d: -f1,7 /etc/passwd | sort | uniq -u _apt:/usr/sbin/nologin backup:/usr/sbin/nologin bin:/usr/sbin/nologin daemon:/usr/sbin/nologin dnsmasq:/usr/sbin/nologin games:/usr/sbin/nologin gnats:/usr/sbin/nologin irc:/usr/sbin/nologin landscape:/usr/sbin/nologin list:/usr/sbin/nologin lp:/usr/sbin/nologin lxd:/bin/false
Ahora he agregado --output-delimiter
La opción y el delimitador de entrada dos puntos (:) se reemplazan con el delimitador de salida ‘ESPACIO’ de la siguiente manera:
$ cut -d: -f1,7 --output-delimiter ' ' /etc/passwd | sort | uniq -u _apt /usr/sbin/nologin backup /usr/sbin/nologin bin /usr/sbin/nologin daemon /usr/sbin/nologin dnsmasq /usr/sbin/nologin games /usr/sbin/nologin gnats /usr/sbin/nologin irc /usr/sbin/nologin landscape /usr/sbin/nologin list /usr/sbin/nologin lp /usr/sbin/nologin lxd /bin/false
Veamos otro ejemplo, aquí usamos el delimitador de salida para imprimir en cada campo en una nueva línea.
Aquí usamos --output-delimiter
como $’n’
que indica una nueva línea.
Verifique la salida:
$ grep root /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$'n' root /root /bin/bash operator /root /sbin/nologin
Cómo cortar por cpersonajes
los -c
La opción (columna) se utiliza para cortar por posición de carácter. Recuerde que ‘TABS’ y ‘Spaces’ también se tratan como caracteres.
Para imprimir el primer carácter de cada línea del archivo llamado content.txt, use a continuación:
$ cut -c 1 content.txt U M O U F
En el siguiente ejemplo, mostraremos los caracteres del 1 al 7 (rango) de cada línea del archivo:
$ cut -c 1-7 content.txt Ubuntu Microso OsX El Unix FreeBSD
Veamos cómo seleccionar columnas por posición inicial o final específica.
Para extraer columnas del segundo carácter al último carácter:
$ cut -c2- content.txt buntu Linux icrosoft Windows sX El Capitan nix reeBSD
Para extraer columnas del primer carácter al cuarto carácter:
cut -c-4 content.txt Ubun Micr OsX Unix Free
Cómo cortar por bytes
Utilizar el -b
opción para seleccionar una parte de una línea especificando una posición de byte por números separados por comas (,). Con el guión puede especificar un rango de bytes.
El siguiente ejemplo cortó del primer, segundo y tercer bytes del archivo llamado ‘content.txt’:
$ cut -b 1,2,3 content.txt Ubu Mic OsX Uni Fre
También podemos listar con rangos usando el siguiente comando:
$ cut -b 1-3,5-7 content.txt Ubutu Micoso OsXEl Uni FreBSD
Algunos ejemplos prácticos de cortes
Cut es más práctico si se usa con una combinación de diferentes comandos de Linux o Unix.
Por ejemplo, desea extraer ‘USER’, ‘PID’ y «COMMAND» usando el comando ps:
ps -L u n | tr -s " " | cut -d " " -f 2,3,14- USER PID COMMAND 0 676 /sbin/agetty -o -p -- u --keep-baud 115200,38400,9600 ttyS0 vt220 0 681 /sbin/agetty -o -p -- u --noclear tty1 linux 0 23174 -bash 0 26737 ps -L u n 0 26738 tr -s 0 26739 cut -d -f 2,3,14-
Tomemos otro ejemplo para extraer el valor ‘total’, ‘usado’ y ‘libre’ de la memoria y guardarlo en un archivo de texto usando un comando múltiple:
$ free -m | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2-4 >> memory.txt Output $ cat memory.txt 985 86 234
Conclusión
El comando de corte se puede canalizar con muchos otros comandos de Linux o Unix. Se puede canalizar con uno o más filtros para un procesamiento de texto adicional.
Una de las limitaciones del comando de corte es que no admite la especificación de más de un carácter como delimitador. Los espacios en blanco múltiples se cuentan como separadores de campos múltiples y deben usar el comando tr antes de cortar para obtener la salida deseada.