shell学习之sed

经过这两天sed的学习,发现其实sed其实挺简单的无非就是两句话来总结:sed是一种基于hold space和pattern space的逐句操作编辑器。

为什么这么说呢,通过学习不难发现,不管是grep ,sed都是利用正则表达式进行的操作,所以这里在学习shell编程前我们一定好好的学习正则表达式。

下来介绍一下我对sed的几点认识:首先就是搞清楚hold space和pattern space的概念。然后再了解sed的命令参数的意义,这样才能游刃有余。

下面是课后习题,1.把Jone的名字改为Jonathan。

zhouqian@zhou:~$ sed -n 's/^Jon/Jonathan/gp' test.txt Jonathan DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100 zhouqian@zhou:~$ sed -n '/^Jon/{s/Jon/Jonathan/g;p;}' test.txt Jonathan DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100 2.删除头3行。

sed '1,3d' test.txt
3.打印第5-10行.这里我还弄错了呢,本以为是才3行呢,后来发现还包含了空格行。 偷笑

zhouqian@zhou:~$ sed -n '5,10p' test.txt Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400 Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700 Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900 4.删除含有Lane的所有行

sed '/Lane/d' test.txt
5.打印所有生日在11月或12月的行

zhouqian@zhou:~$ sed -n '/\:1[12]\//p' test.txt teve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300 Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58700 Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58700 James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000 Barbara Kertz:385-573-8326:832 Ponce Drive, Gary, IN 83756:12/1/46:268500
6.在以Ered开头的行尾加上3颗星.$表示行尾的意思,&用来表示查到的匹配内容

zhouqian@zhou:~$ sed -n '/^Karen/{s/$/&***/gp}' test.txt Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100*** Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58700*** Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58700*** zhouqian@zhou:~$ sed -n '/^Karen/s/$/***/gp' test.txt Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100*** Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58700*** Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58700*** 7.将所有包含Jose的行都替换为JOSE HAS RETIRED

sed '/Jose/c\JOSE HAS RETIRTED' test.txt Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350 JOSE HAS RETIRTED Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200
8.把popeye的生日改为11/14/46,假定您不知道popeye的生日。这里我只想到了这一种方法,大家伙有人知道更好的方法请给我回复啊 微笑

zhouqian@zhou:~$ sed -n '/Popeye/{ s/.\/..\/../11\/14\/46/g;p;}' test.txt Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:11/14/46:22350 zhouqian@zhou:~$ sed -n '/Popeye/p' test.txt Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350
9.删除所有空行

zhouqian@zhou:~$ sed '/^ *$/d' test.txt teve 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

10.将姓和名倒置

zhouqian@zhou:~$ sed 's/\([A-Z][a-z]*\) \([A-Z][a-z]*\):/\2 \1:/g' test.txt teve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300 Boop Betty:245-836-8357:635 Cutesy Lane, Hollywood, CA ,91464:6/23/23:14500 Chevsky Igor:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400 Corder Norma:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值