El comando de corte se usa en los 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 usar 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.
Comando de corte y sintaxis
La sintaxis básica para el comando de corte es la siguiente:
cut OPTION... [FILE]...
Verifiquemos las opciones de corte y, sin ninguna opción, el comando de corte no funcionará.
Opciones de corte
-f
:Extraer especificando un campo. El comando Cortar usa 'TAB' como delimitador de campo predeterminado.
-d
:'Tab' es el delimitador predeterminado y al usar 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
:Para 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 según un delimitador específico 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 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 inicial 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, use --complement
opción. Esta opción usaba dónde 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 --output-delimiter
opción. El delimitador de entrada se especifica mediante -d
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 de dos puntos (:) se reemplazan con el delimitador de salida 'SPACE' 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’
lo que indica una nueva línea.
Verifique la salida:
$ grep root /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=
Cómo cortar por caracteres
El -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 lo siguiente:
$ 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 desde el segundo carácter hasta el ú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
Utilice el -b
opción para seleccionar una parte de una línea especificando una posición de byte por números separados por coma (,). Usando un guión puede especificar un rango de bytes.
El siguiente ejemplo cortado del 1.er, 2.º y 3.er byte 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 corte
Cut es más práctico cuando se usa con una combinación de diferentes comandos de Linux o Unix.
Por ejemplo, desea extraer 'USUARIO', 'PID' y "COMANDO" 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 el 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 procesamiento de texto adicional.
Una de las limitaciones del comando de corte es que no admite especificar más de un carácter como delimitador. Múltiples espacios en blanco se cuentan como separadores de campos múltiples y deben usar el comando tr antes de cortar para obtener el resultado deseado.
\n' root /root /bin/bash operator /root /sbin/nologin
Cómo cortar por caracteres
El -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 lo siguiente:
En el siguiente ejemplo, mostraremos los caracteres del 1 al 7 (rango) de cada línea del archivo:
Veamos cómo seleccionar columnas por posición inicial o final específica.
Para extraer columnas desde el segundo carácter hasta el último carácter:
Para extraer columnas del primer carácter al cuarto carácter:
Cómo cortar por bytes
Utilice el -b
opción para seleccionar una parte de una línea especificando una posición de byte por números separados por coma (,). Usando un guión puede especificar un rango de bytes.
El siguiente ejemplo cortado del 1.er, 2.º y 3.er byte del archivo llamado 'content.txt':
También podemos listar con rangos usando el siguiente comando:
Algunos ejemplos prácticos de corte
Cut es más práctico cuando se usa con una combinación de diferentes comandos de Linux o Unix.
Por ejemplo, desea extraer 'USUARIO', 'PID' y "COMANDO" usando el comando ps:
Tomemos otro ejemplo para extraer el valor 'total', 'usado' y 'libre' de la memoria y guardarlo en un archivo de texto usando el comando múltiple:
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 procesamiento de texto adicional.
Una de las limitaciones del comando de corte es que no admite especificar más de un carácter como delimitador. Múltiples espacios en blanco se cuentan como separadores de campos múltiples y deben usar el comando tr antes de cortar para obtener el resultado deseado.