El comando cut de Linux se utiliza para el procesamiento de texto. Puede usar este comando para extraer una parte del texto de un archivo seleccionando columnas.
Este tutorial proporciona algunos ejemplos prácticos del comando de corte que puede usar en sus actividades diarias de la línea de comandos.
Para la mayor parte del ejemplo, usaremos el siguiente archivo de prueba.
$ cat test.txt cat command for file oriented operations. cp command for copy files or directories. ls command to list out files and directories with its attributes.
1. Seleccionar columna de caracteres
Para extraer solo una columna deseada de un archivo, use la opción -c. El siguiente ejemplo muestra el segundo carácter de cada línea de un archivo test.txt
$ cut -c2 test.txt a p s
Como se vio arriba, los caracteres a, p, s son el segundo carácter de cada línea del archivo test.txt.
2. Seleccionar columna de caracteres usando rango
El rango de caracteres también se puede extraer de un archivo especificando la posición inicial y final delimitada con -. El siguiente ejemplo extrae los primeros 3 caracteres de cada línea de un archivo llamado test.txt
$ cut -c1-3 test.txt cat cp ls
3. Seleccione la columna de caracteres utilizando la posición inicial o final
Se puede pasar la posición de inicio o la posición final al comando de corte con la opción -c.
Lo siguiente especifica solo la posición de inicio antes del '-'. Este ejemplo extrae desde el tercer carácter hasta el final de cada línea del archivo test.txt.
$ cut -c3- test.txt t command for file oriented operations. command for copy files or directories. command to list out files and directories with its attributes.
Lo siguiente especifica solo la posición final después de '-'. Este ejemplo extrae 8 caracteres desde el principio de cada línea del archivo test.txt.
$ cut -c-8 test.txt cat comm cp comma ls comma
Toda la línea se imprimiría si no especifica un número antes o después de '-', como se muestra a continuación.
$ cut -c- test.txt cat command for file oriented operations. cp command for copy files or directories. ls command to list out files and directories with its attributes.
4. Seleccione un campo específico de un archivo
En lugar de seleccionar x número de caracteres, si desea extraer un campo completo, puede combinar las opciones -f y -d. La opción -f especifica qué campo desea extraer y la opción -d especifica cuál es el delimitador de campo que se usa en el archivo de entrada.
El siguiente ejemplo muestra solo el primer campo de cada línea del archivo /etc/passwd usando el delimitador de campo:(dos puntos). En este caso, el primer campo es el nombre de usuario. El archivo
$ cut -d':' -f1 /etc/passwd root daemon bin sys sync games bala
5. Seleccione varios campos de un archivo
También puede extraer más de un campo de un archivo o salida estándar. El siguiente ejemplo muestra el nombre de usuario y el directorio de inicio de los usuarios que tienen el shell de inicio de sesión como "/bin/bash".
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6 root:/root bala:/home/bala
Para mostrar el rango de campos, especifique el campo inicial y el campo final como se muestra a continuación. En este ejemplo, estamos seleccionando los campos del 1 al 4, 6 y 7
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7 root:x:0:0:/root:/bin/bash bala:x:1000:1000:/home/bala:/bin/bash
6. Seleccionar campos solo cuando una línea contiene el delimitador
En nuestro ejemplo de /etc/passwd, si pasa un delimitador diferente que no sea:(dos puntos), el corte solo mostrará la línea completa.
En el siguiente ejemplo, hemos especificado el delimitador como | (tubería), y el comando de corte simplemente muestra la línea completa, incluso cuando no encuentra ninguna línea que tenga | (tubería) como delimitador.
$ grep "/bin/bash" /etc/passwd | cut -d'|' -f1 root:x:0:0:root:/root:/bin/bash bala:x:1000:1000:bala,,,:/home/bala:/bin/bash
Sin embargo, es posible filtrar y mostrar solo las líneas que contienen el delimitador especificado usando la opción -s.
El siguiente ejemplo no muestra ningún resultado, ya que el comando de corte no encontró ninguna línea que tenga | (tubería) como delimitador en el archivo /etc/passwd.
$ grep "/bin/bash" /etc/passwd | cut -d'|' -s -f1
7. Seleccionar todos los campos excepto los campos especificados
Para complementar la lista de campos de selección, utilice la opción –complemento.
El siguiente ejemplo muestra todos los campos del archivo /etc/passwd excepto el campo 7
$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -s -f7 root:x:0:0:root:/root bala:x:1000:1000:bala,,,:/home/bala
8. Cambiar delimitador de salida para visualización
De forma predeterminada, el delimitador de salida es el mismo que el delimitador de entrada que especificamos en la opción cut -d.
Para cambiar el delimitador de salida, use la opción –output-delimiter como se muestra a continuación. En este ejemplo, el delimitador de entrada es:(dos puntos), pero el delimitador de salida es # (hash).
$ grep "/bin/bash" /etc/passwd | cut -d':' -s -f1,6,7 --output-delimiter='#' root#/root#/bin/bash bala#/home/bala#/bin/bash
9. Cambiar delimitador de salida a nueva línea
En este ejemplo, todos y cada uno de los campos de la salida del comando de corte se muestran en una línea separada. Todavía usamos –output-delimiter, pero el valor es $’\n’, lo que indica que debemos agregar una nueva línea como delimitador de salida.
$ grep bala /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$'\n' bala /home/bala /bin/bash
10. Combine Cut con otra salida de comando Unix
El poder del comando de corte se puede realizar cuando lo combina con el stdout de algún otro comando de Unix.
Una vez que domine el uso básico del comando de corte que hemos explicado anteriormente, puede usar sabiamente el comando de corte para resolver muchos de sus requisitos de manipulación de texto.
El siguiente ejemplo indica cómo puede extraer solo información útil de la salida del comando ps. También mostramos cómo filtramos la salida del comando ps usando grep y sed antes de que la salida final se le diera al comando cut. Aquí, hemos usado la opción de corte -d y -f que hemos explicado en los ejemplos anteriores.
$ ps axu | grep python | sed 's/\s\+/ /g' | cut -d' ' -f2,11- 2231 /usr/bin/python /usr/lib/unity-lens-video/unity-lens-video 2311 /usr/bin/python /usr/lib/unity-scope-video-remote/unity-scope-video-remote 2414 /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon 2463 /usr/bin/python /usr/lib/system-service/system-service-d 3274 grep --color=auto python