Используя sed, как напечатать все строки с днями рождения в ноябре или декабре?

Предполагая имя входного файла "ежедневник" следующим образом:

Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400
Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92743:7/25/53:85100
Fred Fardbarkle:674-843-1385:20 Parak Lane, Duluth, MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700
ABE LINCOLN:813-555-0123:1549 Cabin Drive, Springfield, IL 61801:2/12/09:79000
James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000

2 ответа2

5
egrep '^[^:]*:[^:]*:[^:]*:(11|12)/'
sed -rn '/^[^:]*:[^:]*:[^:]*:(11|12)\//p'
  • /regex/p - вывести строки, соответствующие регулярному выражению
  • ^ - начало строки
  • [^:]+ - первое, второе, третье поля (любое количество любых символов, кроме :
  • : - разделители полей
  • (11|12)\/ - либо 11 либо 12 , за которыми следует /
awk -F: '$4 ~ /^(11|12)\//'
perl -aF: -ne 'print if $F[3] =~ /^(11|12)\//'
1

Не sed, но grep проще и уместнее.

grep -E "(11|12)/\d{1,2}/\d{1,2}" steve.txt

(11 | 12) означает совпадение либо 11, либо 12, а \d {1,2} означает совпадение 1 или 2 цифр.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .