Wie kann ich mit egrep alle Zeilen drucken, deren Nachnamen mit K
oder 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 -i
Option 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 vonK
oderk
, gefolgt von einer beliebigen Anzahl von Zeichen, die keine Leerzeichen sind (\S+
), bis zum Ende des Felds ($
).