使用 sed,如何打印生日在十一月或十二月的所有行?
假设输入文件名“datebook”如下:
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
答案1
egrep '^[^:]*:[^:]*:[^:]*:(11|12)/'
sed -rn '/^[^:]*:[^:]*:[^:]*:(11|12)\//p'
/regex/p
– 打印与正则表达式匹配的行^
– 行首[^:]+
– 第一、第二、第三字段(任意数量的任意字符,除了:
):
– 字段分隔符(11|12)\/
– 要么11
或12
,然后是/
awk -F: '$4 ~ /^(11|12)\//'
perl -aF: -ne ‘如果 $F[3] =~ /^(11|12)\// 则打印’
答案2
不是 sed,但是 grep 更简单且更合适。
grep -E "(11|12)/\d{1,2}/\d{1,2}" steve.txt
(11|12) 表示匹配 11 或 12,而 \d{1,2} 表示匹配 1 或 2 位数字。