Wie kann ich das erste Zeichen in der zweiten Spalte aussortieren?

Wie kann ich das erste Zeichen in der zweiten Spalte aussortieren?

Wie kann ich mit egrep alle Zeilen drucken, deren Nachnamen mit Koder beginnen 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

Antwort1

Ein erster Versuch wäre

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

Dies setzt jedoch voraus, dass es immer genau einen Vornamen und keine Initialen gibt.
In diesem Beispiel können Sie die -iOption verwenden und ersetzen [Kk]durch nurk

Es wäre vielleicht besser, sich an den ersten Doppelpunkt zu klammern

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

Wenn Sie wirklich nur den Nachnamen und nicht die ganze Zeile drucken möchten, sollten Sie die Verwendung von awk (oder Perl) in Betracht ziehen.


Update: So '^[^ ]* *[Kk]'ist der erste Grep-Ausdruck aufgebaut

  '     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

Antwort2

perl -aF/:/ -ne 'print if $F[0] =~ /\s[Kk]\S+$/'
  • Mit -aF/:/wird die gesamte Zeile in durch Doppelpunkt getrennte Felder aufgeteilt;
  • $F[0]ist das nullte Feld und enthält die Namen;
  • /\s[Kk]\S+$/entspricht einem Leerzeichen ( \s), gefolgt von Koder k, gefolgt von einer beliebigen Anzahl von Zeichen, die keine Leerzeichen sind ( \S+), bis zum Ende des Felds ( $).

verwandte Informationen