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.
Para example 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
...
La siguiente example 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
Esta example, 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 example comando imprime todos los campos excepto el segundo campo en el archivo ‘/ 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
Vamos a comprobar otro example, 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=
Cómo cortar por cpersonajes
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 a continuación:
$ cut -c 1 content.txt
U
M
O
U
F
En el siguiente example mostraremos el carácter 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 guion puede especificar un rango de bytes.
La siguiente example corte de 1er, 2do y 3er 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.
Para example, 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 example 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 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.
n' root /root /bin/bash operator /root /sbin/nologin
Cómo cortar por cpersonajes
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 a continuación:
En el siguiente example mostraremos el carácter 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 del segundo carácter al último carácter:
Para extraer columnas del primer carácter al cuarto carácter:
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 guion puede especificar un rango de bytes.
La siguiente example corte de 1er, 2do y 3er bytes del archivo llamado ‘content.txt’:
También podemos listar con rangos usando el siguiente comando:
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.
Para example, desea extraer ‘USER’, ‘PID’ y “COMMAND” usando el comando ps:
Tomemos otro example 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 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.