首页 > 代码库 > 有关linux三剑客之sed的一道练习题

有关linux三剑客之sed的一道练习题

1.1 取出a.txt中的908这三个数字:

实例:

[root@zhengjincheng tmp]# cat a.txt

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

i am zjc 1046(88)908 jiayou

[root@zhengjincheng tmp]#


结果是:

[root@zhengjincheng tmp]# cat a.txt

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

i am zjc 1046(88)908 jiayou

[root@zhengjincheng tmp]#

[root@zhengjincheng tmp]# sed   ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘ a.txt|sed -n ‘3p‘

908

[root@zhengjincheng tmp]#


操作过程(仅供参考):

[root@zhengjincheng tmp]# cat a.txt

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

i am zjc 1046(88)908 jiayou

[root@zhengjincheng tmp]# sed ‘3p‘ a.txt                           忘记加参数-n取消默认输出

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

i am zjc 1046(88)908 jiayou

i am zjc 1046(88)908 jiayou

[root@zhengjincheng tmp]# sed -n ‘3p‘ a.txt         加了参数后恢复正常只输出匹配的内容

i am zjc 1046(88)908 jiayou

[root@zhengjincheng tmp]# sed -n ‘3s#^.*88)\(.*)jia.*$#\1#gp‘ a.txt  转义符加的不对

sed: -e expression #1, char 27: Unmatched ( or \(

[root@zhengjincheng tmp]# sed  ‘3s#^.*88)\(.*) jia.*$#\1#g‘ a.txt    转义符加的还是不对

sed: -e expression #1, char 26: Unmatched ( or \(

[root@zhengjincheng tmp]# sed  ‘3s#^.*88)\(.*\) jia.*$#\1#g‘ a.txt    转义符正确后正常了

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb                 但发现默认输出了默认输出,原因是没有加 -n ?

908

[root@zhengjincheng tmp]# sed -n  ‘3s#^.*88)\(.*\) jia.*$#\1#g‘ a.txt 加了-n 竟然没内容了

[root@zhengjincheng tmp]# sed -n  ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘ a.txt 还没找到原因

[root@zhengjincheng tmp]# sed   ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘a.txt   还没找到原因

aaaaaaaaaaaaa                                        

bbbb bbbbbbbbbbbbbb                                                       还没找到原因

908

[root@zhengjincheng tmp]# sed   ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘a.txt   还没找到原因

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

908

[root@zhengjincheng tmp]# sed   ‘s#^.*88)\([0-9].*\) jia.*$#\1#g‘ a.txt    还没找到原因

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

908

[root@zhengjincheng tmp]# sed   ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘a.txt   还没找到原因

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

908

[root@zhengjincheng tmp]# sed -n   ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘a.txt  还是觉得是-n

[root@zhengjincheng tmp]#

[root@zhengjincheng tmp]# sed -nr  ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘ a.txt  是没加-r吗

sed: -e expression #1, char 32: Unmatched ) or \)

[root@zhengjincheng tmp]# sed -n  ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘ a.txt  还没找到原因

[root@zhengjincheng tmp]# sed -n  ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘ a.txt|xargs ls

还没找到原因

a.txt p.txt  test.txt

[root@zhengjincheng tmp]# sed -n  ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘ a.txt|xargs cat 

还没找到原因

[root@zhengjincheng tmp]# sed -n  ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘ a.txt       

还没找到原因

[root@zhengjincheng tmp]# sed   ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘a.txt         还没找到原因

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

908

[root@zhengjincheng tmp]# sed   ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘ a.txt|sed ‘3p‘

再加一个sed

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

908

908

[root@zhengjincheng tmp]# sed   ‘3s#^.*88)\([0-9].*\) jia.*$#\1#g‘ a.txt|sed -n ‘3p‘

取消默认输出

908

[root@zhengjincheng tmp]# cat a.txt

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

i am zjc 1046(88)908 jiayou

[root@zhengjincheng tmp]#

[root@zhengjincheng tmp]# sed ‘3s#^.*88)\([0-9].*\)jia.*$#\1#gp‘ a.txt  哦,原来忘记了加p

aaaaaaaaaaaaa

bbbb bbbbbbbbbbbbbb

908

908

[root@zhengjincheng tmp]# sed -n‘3s#^.*88)\([0-9].*\) jia.*$#\1#gp‘ a.txt 加个-n 就o了

908

[root@zhengjincheng tmp]#


本文出自 “jinchengzheng@boke” 博客,请务必保留此出处http://jinchengzheng.blog.51cto.com/10798482/1843245

有关linux三剑客之sed的一道练习题