Linux_三剑客_sed

【概念】

  sed是linux中提供的一个外部命令,是一个行(流)编辑器,非交互式的对文件内容进行增删改查的操作,

使用者只能在命令行输入编辑命令,指定文件名,然后再屏幕上查看输出。和文本编辑器有本质的区别

【区别】

  文本编辑器:编辑对象是文件

  行编辑器  : 编辑对象是文件中的行(一般用于配置文件信息)

        日志文件信息(grep ,awk 分析)

【执行原理】

Linux_三剑客_sed_第1张图片

 【命令语法格式】

  sed  参数 '条件 动作 '  文件信息

【参数】

  -n --- 取消默认输出
  -i --- 真正修改文件内容 -i.bak 修改文件时,会自动创建备份文件
  -e --- 扩展识别多个动作信息
  -r --- 识别扩展正则

【指令(动作)】 
  p --- 将指定信息进行输出
  d --- 删除指定信息
  i --- 在指定信息行上面插入信息
  a --- 在指定信息行下面添加信息
  s --- 替换/取代 substitute
  g --- 全局替换
  c --- 将整行信息做替换

【命令操作:】
  【sed查询操作: 过滤信息】
  1.按照文件行进行查询:
    --按照文件指定单行信息进行过滤:

  Linux_三剑客_sed_第2张图片

    --按照文件指定多行信息进行过滤
      1) 过滤连续多行信息 1-3行信息

     
 2) 过滤不连续多行信息 1,3,7行信息

2.按照文件字符信息过滤:
  按照单个字符信息过滤文件内容
  按照多个字符信息过滤文件内容
 --按照字符内容信息进行连续过滤
Linux_三剑客_sed_第3张图片
特殊情况01:
Linux_三剑客_sed_第4张图片

特殊情况02:
Linux_三剑客_sed_第5张图片


2) 按照字符内容信息进行不连续过滤
Linux_三剑客_sed_第6张图片


sed删除操作:】

  指定行信息进行删除
Linux_三剑客_sed_第7张图片

-i --- 真正修改文件内容

   不加-i表示只是对模式空间里面数据进行处理,不会影响真实文件数据
【执行原理】
  01. 打开person.txt文件
  02. 读取文件中内容信息, 并将内容放入到模式空间中
  03. 会根据模式空间里面读取到的内容, 生成一个临时文件person_tmp.txt
  04. 关闭person.txt文件
  05. 将临时文件指定内容进行删除处理
  06. 将临时文件重命名为person.txt


删除文件的空行

Linux_三剑客_sed_第8张图片

Linux_三剑客_sed_第9张图片
sed命令删除操作时,最好对源文件进行备份
PS: -i参数使用时放在所有参数的最后面

Linux_三剑客_sed_第10张图片

sed添加操作:

  指定信息一行前面或者一行后面添加新的信息
Linux_三剑客_sed_第11张图片

练习题:
  01. 文件末尾添加 一行新信息

  02. 文件末尾添加 两行新信息 
Linux_三剑客_sed_第12张图片

03. 文件第三行后面添加  文件第五行前面插入 
Linux_三剑客_sed_第13张图片

真正添加信息
Linux_三剑客_sed_第14张图片

【sed修改操作:】

   借助()后项引用前项
sed '条件s#oldboy#oldgirl#g' 文件
[root@localhost oldboy]# cat person.txt
102,zhaoyao,CTO
104,yy,CFO
105,feixue,CIO
101,oldboy,CEO
102,oldgirl,CEO
104,yy,CFO
[root@localhost oldboy]# sed '4s#oldboy#oldgirl#g' person.txt
102,zhaoyao,CTO
104,yy,CFO
105,feixue,CIO
101,oldgirl,CEO
102,oldgirl,CEO
104,yy,CFO

[root@localhost oldboy]# sed -r '4s#(o.*y)#\1edu#g' person.txt
102,zhaoyao,CTO
104,yy,CFO
105,feixue,CIO
101,$oldboyedu,CEO
102,oldgirl,CEO
104,yy,CFO

练习题:
01. 利用sed命令取出IP地址
第一个历程:显示出IP地址
ip a s eth0
第二个历程:显示出有IP地址行
ip a s eth0|sed -n '3p'
第三个历程:取出IP地址
ip a s eth0|sed -n '3p'|sed -r 's#^.*t (.*)#\1#g' --- 截取IP地址前面内容
ip a s eth0|sed -n '3p'|sed -r 's#^.*t (.*)#\1#g'|sed -r 's#(.*)/24.*$#\1#g' --- 截取IP地址后面内容
10.0.0.200

sed -r 's#^.*t (.*)#\1#g'
sed -r 's#(.*)/24.*$#\1#g'

sed -r 's#^.*t (.*)/24.*$#\1#g'
[root@localhost oldboy]# ip a s eth0|sed -n '3p'|sed -r 's#^.*t (.*)/24.*$#\1#g'
10.0.0.200

sed -n '3 p'
sed -r 's#^.*t (.*)/24.*$#\1#g'

sed -nr '3s#^.*t (.*)/24.*$#\1#gp'
[root@localhost oldboy]# ip a s eth0|sed -nr '3s#^.*t (.*)/24.*$#\1#gp'
10.0.0.200

02. 批量创建用户并设置随机密码
1) 批量创建用户设置密码 sed 拼凑命令
seq -w 10|sed -r 's#(.*)#useradd oldboy\1;echo xxx |passwd --stdin oldboy\1 #g'
2) 如何生成随机数
tr -cd 'a-zA-Z0-9' 3)如何设置变量,设置变量作用
password=xxx

seq -w 10|sed -r 's#(.*)#useradd oldboy\1;Password=$(tr -cd 'a-zA-Z0-9' >/tmp/user_pass.txt #g'|bash


05. 课程知识总结:
1)sed命令作用说明:过滤文件内容(根据行号过滤)| 修改编辑文件内容
2)sed命令执行原理:处理文件时,按行处理 --> 处理行放入模式空间 --> 条件匹配 执行动作(p d a i s###g) --> 处理下一行
3)sed命令语法结构:sed 参数 '匹配条件(行|/字符信息/) 处理指令 pdiasgc'
4)sed命令使用练习:


[root@localhost oldboy]# sed '/oldboy/c oldboy66' person.txt
102,zhaoyao,CTO
104,yy,CFO
105,feixue,CIO
oldboy66
102,oldgirl,CEO
104,yy,CFO

转载于:https://www.cnblogs.com/zhanghongqi/p/11590412.html

你可能感兴趣的:(Linux_三剑客_sed)