shell学习之sed

34 篇文章 0 订阅
18 篇文章 0 订阅

经过这两天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、付费专栏及课程。

余额充值