Chinaunix首页 | 论坛 | 博客
  • 博客访问: 322747
  • 博文数量: 72
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 748
  • 用 户 组: 普通用户
  • 注册时间: 2018-09-21 18:49
文章分类

全部博文(72)

我的朋友

分类: LINUX

2018-10-24 17:05:41

一.sed简介
sed:是一个编辑器,是一个强大的文件处理工具。

sed作用:用来替换、删除,更新文件中的内容。sed能自动处理一个或多个文件。

sed原理:sed以文本的行为单位进行处理,一次处理一行内容。首先sed把当前处理的行存储在临时缓冲区中(称为模式空间pattern space),接着处理缓冲区中的行,处理完成后,把缓冲区的内容送往屏幕。sed处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示,这样不断的重复,直到文件末尾。处理完文件的最后一行后,sed便结束运行。

因为sed是对文件中每行在临时缓冲区中的副本进行编辑,所以原文件内容并没有改变,除非重定向输出。

二 sed命令
 命令           功能
 a\              在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
 c               用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行
 i\               在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行
 d                删除行
 h              把模式空间里的内容复制到暂存缓冲区
 H              把模式空间里的内容追加到暂存缓冲区
 g                 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
 G                把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
 l                列出非打印字符
 p                打印行
 n                读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
 q                结束或退出sed
 r                从文件中读取输入行
 !                对所选行以外的所有行应用命令
 s                用一个字符串替换另一个
 g                在行内进行全局替换
 w                 将所选的行写入文件
 x                交换暂存缓冲区与模式空间的内容
 y                将字符替换为另一字符(不能对正则表达式使用y命令)

三 sed 选项
  -e    进行多项编辑,即对输入行应用多条sed命令时使用
  -n     取消 默认的输出
  -f     指定sed脚本的文件名
  -i         决定不是是将sed的操作作用在源文件上
  -r        使用 多个sed命令

四 地址定位
    x 指定x行号
     x,y 指定x到y行号
    /key/ 查询包含关键字的行   

     /key1/,/key2/  匹配包含两个关键字之间的行
   /key/,x  从匹配关键字开始到文件第x行
  x, /key/ 从第x行开始到与关键字的匹配行之间的行
  x,y! 不包含x到y行
举例说明
  1.sed -n '2,5p' 1.txt 打印第二行到第五行,n和p结合使用
  2.sed '2,5d' 1.txt 删除第二行到第五行
  3.sed '1ihello world' 1.txt 在第一行前面插入hello world
  4.sed '1ihello\nworld' 1.txt 在第一行前面插入hello world,换行之后插入world
  5.sed '1ihello\ 在第一行前面插入hello world,换行之后插入world
     world\           在换行之后插入999
     999\' 1.txt  
  6.sed '5ahello world' 1.txt 在第5行的下面插入hello world
  7.sed 'ahello world' 1.txt 在每一行的下面插入hello world
  8.sed 'ihello world' 1.txt 每一行的前面插入hello world
  9.sed '$ihello world' 1.txt 每最后一行的前面插入hello world
  10.sed '$ahello world' 1.txt 每最后一行的下面插入hello world
  11.sed '3chello world' 1.txt 把第三行替换成hello world
  12.sed '10r 2.txt' 1.txt 把文件2.txt的内容输入到1.txt的第10行下面
  13.sed -n '1!p' 1.txt 打印第一行之外的所有行
  14.sed '1,5w 2.txt' 1.txt 将1.txt中的第一行到第五行保存到2.txt中
  15.sed '1,5w./home/2.txt' 1.txt 将1.txt中的第一行到第五行令外保存到2.txt中(2.txt
                                                  可以没有,系统会创建)
  16.sed -n 's/root/ROOT/p' 1.txt 替换一行内第一个满足条件的
  17.sed -n 's/root/ROOT/gp' 1.txt替换一行内所有满足条件的
  18.sed -n '5,/^stu/p' 1.txt 从第五行开始匹配以stu开头的行
  19.sed -rn '^lp|^mail/p' 1.txt匹配以lp开头或mail开头的行
  20.sed ‘y/uu/Y#/’ 3.txt 将所有的u替换成Y
  21.sed -n 's/^root/#&/p' 1.txt 注释掉root开头的行
  22.sed -n '/nologin$/=' 1.txt 打印以nologin结尾的行号
  23.sed -i 's/ui/98/;s/123/poi/' 3.txt 修改文件内容
  

阅读(609) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~