comando de corte de Linux

Actualizado: 05/04/2019 por Computer Hope

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:

  1. Nombre de usuario
  2. Contraseña (se muestra como x si está cifrada)
  3. Número de identificación de usuario (UID)
  4. Número de ID de grupo (GID)
  5. Campo de comentario (utilizado por el comando finger)
  6. Directorio de inicio
  7. 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *