comando de corte de Linux
En Unix -al igual que los sistemas operativos, el comando cut elimina («corta») secciones de cada línea de un archivo o archivos.
Este documento cubre la versión GNU / Linux de cut.
Sintaxis
cut OPTION... ...
Opciones
-b, –bytes = LIST | Seleccione solo los bytes de cada línea como se especifica en LIST. LISTA especifica un byte, un conjunto de bytes o un rango de bytes; consulte Especificación de LIST a continuación. |
-c, –characters = LIST | Seleccione solo los caracteres de cada línea como se especifica en LIST. LISTA especifica un carácter, un conjunto de caracteres o un rango de caracteres; consulte Especificación de LISTA a continuación. |
-d, –delimiter = DELIM | use el carácter DELIM en lugar de una pestaña para el delimitador de campo. |
-f, –fields = LIST | seleccione solo estos campos en cada línea; también imprime cualquier línea que no contenga un carácter delimitador, a menos que se especifique la opción -s. LISTA especifica un campo, un conjunto de campos o un rango de campos; consulte Especificación de LIST a continuación. |
-n | Esta opción se ignora, pero se incluye por razones de compatibilidad. |
–complement | complementa el conjunto de bytes, caracteres o campos seleccionados. |
-s, –only-delimited | no imprima líneas que no contengan delimitadores. |
–output-delimiter = STRING | use STRING como cadena delimitador de salida. El valor predeterminado es usar el delimitador de entrada. |
–help | Mostrar un mensaje de ayuda y salir. |
–version | generar información sobre la versión y salir. |
Notas de uso
Cuando invoques a cut, usa la opción -b, -c o -f, pero solo una de ellas.
Si no se especifica ningún FILE, corta las lecturas de la entrada estándar.
Especificando LIST
Cada LIST se compone de un número entero, un rango de números enteros o múltiples rangos de números enteros separados por comas. La entrada seleccionada se escribe en el mismo orden en que se lee y se escribe en la salida exactamente una vez. Un rango consta de:
Por ejemplo, digamos que tiene un archivo llamado data.txt que contiene el siguiente texto:
onetwothreefourfivealphabetagammadeltaepsilon
En este ejemplo, cada una de estas palabras está separada por un carácter de tabulación, no por espacios. El carácter de tabulación es el delimitador predeterminado de corte, por lo que de forma predeterminada considerará que un campo está delimitado por una tabulación.
Para «cortar» solo el tercer campo de cada línea, use el comando:
cut -f 3 data.txt
… que dará como resultado lo siguiente:
threegamma
Si, en cambio, desea «cortar» solo el campo del segundo al cuarto de cada línea, use el comando:
cut -f 2-4 data.txt
… que generará lo siguiente:
twothreefourbetagammadelta
Si desea» cortar «solo el primer paso segundo y cuarto a quinto campo de cada línea (omitiendo el tercer campo), use el comando:
cut -f 1-2,4-5 data.txt
… que generará lo siguiente:
onetwofourfivealphabetadeltaepsilon
O, digamos tú desea el tercer campo y todos los campos posteriores, omitiendo los dos primeros campos. En este caso, puede usar el comando:
cut -f 3- data.txt
… que generará lo siguiente:
threefourfivegammadeltaepsilon
La especificación de un rango con LIST también se aplica a cortar caracteres (-c) o bytes (-b) de una línea. Por ejemplo, para generar solo el carácter del tercero al duodécimo de cada línea de data.txt, use el comando:
cut -c 3-12 data.txt
… que generará lo siguiente:
etwothrephabetag
Recuerde que el «espacio» entre cada palabra es en realidad un único carácter de tabulación, por lo que ambas líneas de salida muestran diez caracteres: ocho caracteres alfanuméricos y dos caracteres de tabulación. En otras palabras, cortar es omitir los dos primeros caracteres de cada línea, contando las pestañas como un carácter cada una; salida de caracteres del tres al doce, contando las pestañas como un carácter cada una; y omitir cualquier carácter después del duodécimo.
Contar bytes en lugar de caracteres dará como resultado la misma salida en este caso, porque en un archivo de texto codificado en ASCII, cada carácter está representado por un solo byte (ocho bits ) de datos. Entonces, el comando:
cut -b 3-12 data.txt
… producirá, para nuestro archivo data.txt, exactamente el mismo resultado:
etwothrephabetag
Especificación de un delimitador distinto a la pestaña
El carácter de tabulación es el delimitador predeterminado que cut usa para determinar qué constituye un campo. Por lo tanto, si los campos de su archivo ya están delimitados por pestañas, no es necesario que especifique un carácter delimitador diferente.
Sin embargo, puede especificar cualquier carácter como delimitador.Por ejemplo, el archivo / etc / passwd contiene información sobre cada usuario del sistema, un usuario por línea, y cada campo de información está delimitado por dos puntos («:»). Por ejemplo, la línea de / etc / passwd para el usuario root puede verse así:
root:x:0:0:root:/root:/bin/bash
Estos campos contienen la siguiente información, en el siguiente orden: separados por dos puntos:
- Nombre de usuario
- Contraseña (se muestra como x si está cifrada)
- Número de identificación de usuario (UID)
- Número de ID de grupo (GID)
- Campo de comentario (utilizado por el comando finger)
- Directorio de inicio
- Shell
El nombre de usuario es el primer campo en la línea, así que para mostrar cada nombre de usuario en el sistema, use el comando:
cut -f 1 -d ":" /etc/passwd
… que dará como resultado , por ejemplo:
rootdaemonbinsyschope
(Hay muchas más cuentas de usuario en un sistema típico, incluidas muchas cuentas específicas de los servicios del sistema, pero para este ejemplo pretendemos solo hay cinco usuarios.)
El tercer campo de cada línea en el archivo / etc / passwd es el UID (número de identificación de usuario), por lo que para mostrar cada nombre de usuario y número de identificación de usuario, use el comando:
… que dará como resultado lo siguiente, por ejemplo:
root:0daemon:1bin:2sys:3chope:1000
Como puede ver, el resultado será delimitado, de forma predeterminada, utilizando el mismo carácter delimitador especificado para la entrada. En este caso, ese es el carácter de dos puntos («:»). Sin embargo, puede especificar un delimitador diferente para la entrada y la salida. Por lo tanto, si desea ejecutar el comando anterior, pero tiene la salida delimitada por un espacio, podría usar el comando:
cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd
root 0daemon 1bin 2sys 3chope 1000
Pero, ¿qué sucede si desea que la salida esté delimitada por una pestaña? ? Especificar un carácter de tabulación en la línea de comando es un poco más complicado, porque es un carácter no imprimible. Para especificarlo en la línea de comando, debe «protegerlo» del shell. Esto se hace de manera diferente según el shell que utilice » utilizando, pero en el shell predeterminado de Linux (bash), puede especificar el carácter de tabulación con $ «\ t». Entonces, el comando:
cut -f 1,3 -d ":" --output-delimiter=$"\t" /etc/passwd
… dará como resultado lo siguiente, por ejemplo:
root0daemon1bin2sys3chope1000
Ejemplos
cut -c 3 file.txt
Genere el tercer carácter de cada línea del archivo file.txt, omitiendo los demás.
cut -c 1-3 file.txt
Muestra los primeros tres caracteres de cada línea del archivo file.txt, omitiendo el resto.
cut -c -3 file.txt
Igual que el comando anterior. Genere los primeros tres caracteres de cada línea de file.txt.
cut -c 3- file.txt
Genere del tercero al último carácter de cada línea del archivo file.txt, omitiendo los dos primeros caracteres.
cut -d ":" -f 1 /etc/passwd
Muestra el primer campo del archivo / etc / passwd, donde los campos están delimitados por dos puntos («:»). El primer campo de / etc / passwd es el nombre de usuario, por lo que este comando generará todos los nombres de usuario en el archivo passwd.
grep "/bin/bash" /etc/passwd | cut -d ":" -f 1,6
Genere el primer y sexto campo, delimitado por dos puntos, de cualquier entrada en el archivo / etc / passwd que especifique / bin / bash como shell de inicio de sesión. Este comando generará el nombre de usuario y el directorio de inicio de cualquier usuario cuyo shell de inicio de sesión sea / bin / bash.