¿Cómo eliminar el primer carácter de la segunda columna?

¿Cómo eliminar el primer carácter de la segunda columna?

Usando egrep, ¿cómo puedo imprimir todas las líneas donde los apellidos comienzan con Ko k?

Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900
Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
Jennifer Cowan:548-834-2348:583 Laurel Ave., kingsville, TX 83745:10/1/35:58900
Lesley kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500
Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000

Respuesta1

Un primer intento sería

  grep '^[^ ]*  *[Kk]'

Pero esto supone que siempre hay exactamente un nombre y ninguna inicial.
En este ejemplo, puede usar la -iopción y reemplazarla [Kk]con solok

Quizás sería mejor aferrarse al primer colon.

  grep -i ' k[^:]*:'

Si realmente desea imprimir solo el apellido y no toda la línea, debería considerar usar awk (o perl)


Actualización: así es como '^[^ ]* *[Kk]'se construye la primera expresión grep

  '     apostrophe delimits a parameter that contains spaces
        and other so-called meta-characters that the shell might alter
  ^     caret means start of line
  [     brackets mark a set of characters, any one of which is to be matched
  ^     inside brackets means negation or 'none of the following'
        so `[^ ]` means "not a space"
  ]     is the end of the set.
  *     means 0,1 or more of the prior character
        so `[^ ]*` means any contiguous group of characters that does not 
        contain a space
  then we have two spaces
  *     means 0,1 or more of the prior character
        so space space * means 1 nor more spaces.
  [Kk]  means `K` or `k`
  [^:]* means 0,1 or more characters that are not a colon
  :     followed by a colon

Respuesta2

perl -aF/:/ -ne 'print if $F[0] =~ /\s[Kk]\S+$/'
  • Con -aF/:/, toda la línea se divide en campos separados por dos puntos;
  • $F[0]es el campo cero y contiene los nombres;
  • /\s[Kk]\S+$/coincide con un espacio ( \s), seguido de Ko k, seguido de cualquier número de caracteres que no sean espacios ( \S+) hasta el final del campo ( $).

información relacionada