Excluir campos con cut
Normalmente usamos cut para extraer un único campo. Por ejemplo, si queremos extraer la primera palabra, siendo el espacio en blanco el delimitador de las palabras usamos los modificadores -d » « para indicar cuál es el delimitador y -f 1 para indicar que queremos el primer campo:
$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f 1 Salió
Si no queremos la primera palabra, sino la última, y no sabemos el número exacto del campo de esta última palabra, podemos filtrar con rev la cadena y volver a filtrar con rev el resultado:
$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | rev | cut -d " " -f 1 | rev hociquirromo
Veamos el por qué de este doble uso de rev.
Con rev cambia el orden de principio a fin de la cadena:
$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | rev omorriuqicoh ,ograliloc ,onacibrab nótar nu óilaS
Así que si sólo filtramos con rev una vez, los devuelve la última palabra, pero con el orden invertido:
$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | rev | cut -d " " -f 1 omorriuqicoh
Ya sabemos cómo extraer un campo concreto, pero, ¿qué pasa si lo que queremos es excluir ese campo y que muestre todo lo demás? Deberemos indicar en lugar de un campo concreto, como -f 1, indicar un rango. Si queremos desde el campo 2 hasta el final, usaremos -f 2-:
$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f 2- un ratón barbicano, colilargo, hociquirromo
Si no indicamos final del rango, extrae desde el campo indicado hasta el final de la cadena. Lo mismo, pero al revés, si no indicamos comienzo del rango:
$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f -4 Salió un ratón barbicano,
Podemos indicar el comienzo y el final del rango y cut sólo extrae las palabras que forman parte de ese rango:
$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f 2-5 un ratón barbicano, colilargo,
O podemos indicar determinados campos separados por comas y cut sólo extrae esas palabras:
$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f 2,5 un colilargo,
Y si queremos excluir al comienzo y al final, podemos filtrar este resultado con rev. Veamos cómo eliminar la primera y la última palabra:
$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f 2- | rev | cut -d " " -f 2- | rev un ratón barbicano, colilargo,