使用 sed,如何打印与特定日期匹配的所有行?

使用 sed,如何打印与特定日期匹配的所有行?

使用 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)\/– 要么1112,然后是/
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 位数字。

相关内容