Comando de corte de Linux

comando de corte

En los sistemas operativos tipo Unix, el comando de corte elimina ("corta") secciones de cada línea de un archivo o archivos.

Este documento cubre la versión GNU / Linux de cut.

Sintaxis

OPCIÓN de corte ... [ARCHIVO] ...

-b, --bytes = LISTA Seleccione solo los bytes de cada línea como se especifica en LIST. LIST especifica un byte, un conjunto de bytes o un rango de bytes; ver Especificar LISTA 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; ver Especificando la LISTA a continuación.
-d, --delimiter = DELIM use el carácter DELIM en lugar de una pestaña para el delimitador de campo.
-f, --campos = LISTA seleccione solo estos campos en cada línea; también imprima cualquier línea que no contenga caracteres delimitadores, a menos que se especifique la opción -s. LIST especifica un campo, un conjunto de campos o un rango de campos; ver Especificando la LISTA a continuación.
-n Esta opción se ignora, pero se incluye por razones de compatibilidad.
--complemento complementa el conjunto de bytes, caracteres o campos seleccionados.
-s, --solo delimitado no imprima líneas que no contengan delimitadores.
--output-delimiter = STRING use STRING como la cadena delimitador de salida. El valor predeterminado es usar el delimitador de entrada.
--ayuda Muestre un mensaje de ayuda y salga.
--versión salida de información de versión y salida.

Notas de uso

Al invocar el corte, use la opción -b, -c o -f, pero solo una de ellas.

Si no se especifica FILE, corta las lecturas de la entrada estándar.

Especificando LISTA

Cada LISTA está compuesta por un número entero, un rango de enteros o múltiples rangos de enteros separados por comas. La entrada seleccionada se escribe en el mismo orden en que se lee y se escribe para que salga exactamente una vez. Una gama consta de:

N el enésimo byte, carácter o campo, contados desde 1.
N- desde el enésimo byte, carácter o campo, hasta el final de la línea.
NM desde el enésimo al enésimo byte, carácter o campo (inclusive).
-M desde el primero hasta el byte Mth, carácter o campo.

Por ejemplo, supongamos que tiene un archivo llamado data.txt que contiene el siguiente texto:

uno dos tres cuatro cinco alfa beta gamma delta épsilon

En este ejemplo, cada una de estas palabras está separada por un carácter de tabulación, no espacios. El carácter de tabulación es el delimitador de corte predeterminado, por lo que considerará por defecto que un campo está delimitado por una tabulación.

Para "cortar" solo el tercer campo de cada línea, use el comando:

corte -f 3 data.txt

... que generará lo siguiente:

tres gamma

Si, en cambio, desea "cortar" solo el campo del segundo al cuarto de cada línea, use el comando:

corte -f 2-4 data.txt

... que generará lo siguiente:

dos tres cuatro beta delta gamma

Si desea "cortar" solo el campo del primero al segundo y del cuarto al quinto de cada línea (omitiendo el tercer campo), use el comando:

corte -f 1-2,4-5 data.txt

... que generará lo siguiente:

uno dos cuatro cinco alfa beta delta épsilon

O, digamos que desea el tercer campo y todos los campos posteriores, omitiendo los dos primeros campos. En este caso, puede usar el comando:

corte -f 3- data.txt

... que generará lo siguiente:

tres cuatro cinco gamma delta épsilon

La especificación de un rango con LIST también se aplica a los caracteres de corte (-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:

corte -c 3-12 data.txt

... que generará lo siguiente:

e two thre pha beta g

Recuerde que el "espacio" entre cada palabra es en realidad un solo 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 omite los dos primeros caracteres de cada línea, contando las pestañas como un carácter cada una; sacando caracteres de tres a doce, contando las pestañas como un carácter cada una; y omitiendo cualquier personaje 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:

corte -b 3-12 data.txt

... para nuestro archivo data.txt, producirá exactamente la misma salida:

e two thre pha beta g

Especificación de un delimitador distinto de la pestaña

El carácter de tabulación es el delimitador predeterminado que utiliza el corte para determinar qué constituye un campo. Por lo tanto, si los campos de su archivo ya están delimitados por pestañas, no necesita especificar 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 en el 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 raíz puede verse así:

raíz: x: 0: 0: raíz: / raíz: / 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á encriptada)
  3. Número de identificación de usuario (UID)
  4. Número de identificación del grupo (GID)
  5. Campo de comentarios (utilizado por el comando de dedo)
  6. Directorio de inicio
  7. Cáscara

El nombre de usuario es el primer campo en la línea, por lo que para mostrar cada nombre de usuario en el sistema, use el comando:

corte -f 1 -d ':' / etc / passwd

... que generará, por ejemplo:

raíz daemon bin sys chope

(Hay muchas más cuentas de usuario en un sistema típico, incluidas muchas cuentas específicas para los servicios del sistema, pero para este ejemplo simularemos que 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:

corte -f 1,3 -d ':' / etc / passwd

... que generará lo siguiente, por ejemplo:

root:0
daemon:1
bin:2
sys:3
chope:1000

Como puede ver, la salida se delimitará, 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. Entonces, si desea ejecutar el comando anterior, pero tiene la salida delimitada por un espacio, puede usar el comando:

cut -f 1,3 -d ':' --output-delimiter = '' / etc / passwd
root 0 daemon 1 bin 2 sys 3 chope 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 realiza de manera diferente según el shell que esté 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

... generará lo siguiente, por ejemplo:

root	0
daemon	1
bin	2
sys	3
chope	1000

Ejemplos

cortar -c 3 file.txt

Imprime el tercer carácter de cada línea del archivo file.txt, omitiendo los demás.

corte -c 1-3 file.txt

Imprime los primeros tres caracteres de cada línea del archivo file.txt, omitiendo el resto.

cortar -c -3 archivo.txt

Igual que el comando anterior. Imprime los primeros tres caracteres de cada línea de file.txt.

cortar -c 3- file.txt

Imprima el tercero a través de los últimos caracteres de cada línea del archivo file.txt, omitiendo los dos primeros caracteres.

cortar -d ':' -f 1 / etc / passwd

Imprima 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á cada nombre de usuario en el archivo passwd.

grep '/ bin / bash' / etc / passwd | corte -d ':' -f 1,6

Imprima los campos primero y sexto, delimitados por dos puntos, de cualquier entrada en el archivo / etc / passwd que especifique / bin / bash como el 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.

Comandos relacionados

grep: filtra el texto que coincide con una expresión regular. pasta: combina las líneas de archivos correspondientes.