免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1093 | 回复: 0
打印 上一主题 下一主题

看了点sed的东西,这是我记在本本里的,较初级 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-05 14:38 |只看该作者 |倒序浏览
(对不住啊,一不小心发错版了,烦请版主删除)
如果有不对的地方,请不吝赐教。

1 读到“ok”时退出
        sed '/ok/q' a.txt

2 读到以“9”开头的行时退出
        sed '/^9/q' a.txt

3 删除a.txt的第2行
        sed '2d' a.txt

4 删除a.txt的第2~3行
        sed '2,3d' a.txt

5 删除a.txt的第5行到第一个包含cat的行
        sed '5,/cat/d' a.txt

6 删除a.txt的空行
        sed '/^$/d' a.txt

7 将每行的第一个Diary替换为DIARY
        sed 's/Diary/DIRAY/' a.txt

8 将所有出现的Diary替换为DIARY
        sed 's/Diary/DIRAY/g' a.txt

9 显示所有包含is的行号
        sed -n '/is/ =' aaa
        -n:禁止默认的输出(读入源行,经处理后输出)
         =:功能限制符,表示输入行号

10 将第2到第3行复制后再输出
         sed '2,3 p' a.txt
        -p:将模式匹配的行(经处理后)再输出一次

11 输出不包含is的行
         sed -n '/is/!p' a.txt

12 只输出修改过的行内容
        sed -n 's/Diary/DIRAY/gp' a.txt

13 只对第1至6行的所有is进行替换
        sed '1,6s/is/xxxxx/gp' a.txt
14 只对第1至6行的所有is进行替换,并且只显经过修改的行

        sed -n '1,6s/is/xxxxx/gp' a.txt
15 只对包含is的行进行替换,将所有的th替换成TH,并且只显示这些经过替换的行
        sed -n '/is/s/th/TH/gp' a.txt
        如果某行有is,但没有th(即没有进行替换),则该行不输出,所以sed的参数p相当于将所有sed命令处理成功的行再输出一次。

16 将s.txt文件包含is的每一行后插入t.txt文件的内容作为输出
        sed '/is/r t.txt' s.txt

17 将s.txt文件中包含is的每一行写入到一个新的文件t.txt中。
        sed '/is/w t.txt' s.txt

18 将s.txt中每一次出现look的行至每一次出现look的行的内容输出到新的文件t.txt。
        sed '/what/,/look/w t.txt' s.txt

19 将s.txt的行读入内存的模式空间中,首先将所有的is用IS替换,此时模式空间内容已修改;执行第二条命令,如果在该行中有字母e,则将所有的e用E替换后再输出修改过的行,最后将模式空间的内容输出。对每一行都进行这两项操作,然后把下一行读入内存进行同样的处理。
        sed -n  -e 's/is/IS/g'  -e 's/e/E/gp' s.txt
        -n:该参数对两个命令都有作用
        -e:表示后面是一个命令,两个命令前的-e都不能省略。

        再如,删除原文件的第2、3、5行:
        sed -e '2d' -e '3d' -e '5d' s.txt
       
        还有一种简单的方法,可能实现-e参数的功能,即将各个命令依次用分号相隔,将上面两个命令用该写法重写,如下
        sed -n 's/is/IS/g;s/e/E/gp' s.txt
        sed '2d;3d;5d' s.txt

       
20 p.txt的内容为:
        s/is/IS/gp
        s/e/E/gp
命令:        sed -n -f p.txt s.txt
功能:用文件内容作为命令。将s.txt的行读入内存的模式空间中,将该行中所有is用IS替换,并输出该行,同时修改模式空间。之后,执行第二条命令,如果在该行中有字母e,则将所有的e用E替换后再输出修改过的行。对每一行都进行p.txt文件内容所指定的这一系列操作,然后把下一行读入内存进行同样的处理。

21 a.txt的内容
        /is/a\
        append a
        /e/a\
        append b
命令:sed -f a.txt s.txt
功能:a.txt 文件内容为要执行的命令,将s.txt的行读入内存的模式空间中,如果该行包含is,则输出该行后,还要在该行后输出append a。在不改变模式究竟内容的情况下,执行第二条命令,如果在该行中有字母e,则再在下一行输出append b。对每一行都进行这两项操作,然后把下一行读入内存进行同样的处理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP