Usando sed, como imprimir todas as linhas que correspondem a uma determinada data?

0

Usando sed, como imprimir todas as linhas onde os aniversários são em novembro ou dezembro?

Assumindo o nome do arquivo de entrada "datebook" da seguinte forma:

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
    
por Steve 04.10.2012 / 19:11

2 respostas

5

egrep '^[^:]*:[^:]*:[^:]*:(11|12)/'
sed -rn '/^[^:]*:[^:]*:[^:]*:(11|12)\//p'
  • /regex/p - linhas de impressão correspondentes a uma expressão regular
  • ^ - início da linha
  • [^:]+ - primeiro, segundo, terceiro campos (qualquer número de qualquer caractere, exceto : )
  • : - separadores de campo
  • (11|12)\/ - ou 11 ou 12 , seguido por /
awk -F: '$4 ~ /^(11|12)\//'
perl -aF: -ne 'print if $F[3] =~ /^(11|12)\//'
    
por 04.10.2012 / 19:18
1

Não sed, mas o grep é mais fácil e apropriado.

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

(11 | 12) significa corresponder a 11 ou 12 e \ d {1,2} significa corresponder a 1 ou 2 dígitos.

    
por 04.10.2012 / 19:18