7月24日 系统正则符号和sed

sed命令

修改文件内容,对文件行进行操作
配置文件,文本文件

语法结构

sed [参数] ‘条件 指令’ 文件信息

[root@oldboy63-libo oldboy]$ sed -n '/disabled/p' /etc/selinux/config 
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
sed操作方式
在文中添加信息
将文件中指定信息删除
替换修改文件内容
查找相应内容信息

查看文件信息

按指定行查询内容
[root@oldboy63-libo oldboy]$ cat person.txt 
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
============================================================================
[root@oldboy63-libo oldboy]$ sed -n '3p' person.txt 
103,Alex,COO
============================================================================
[root@oldboy63-libo oldboy]$ sed -n '2p;5p' person.txt 
102,zhaoyao,CTO
105,feixue,CIO
============================================================================
[root@oldboy63-libo oldboy]$ sed -n '2,5p' person.txt 
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
按指定内容进行过滤
[root@oldboy63-libo oldboy]$ cat person.txt 
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@oldboy63-libo oldboy]$ sed -n '/Alex/p' person.txt 
103,Alex,COO
[root@oldboy63-libo oldboy]$ sed -n '/oldboy/p;/yy/p' person.txt 
101,oldboy,CEO
104,yy,CFO
[root@oldboy63-libo oldboy]$ sed -n '/oldboy\|yy/p' person.txt 
101,oldboy,CEO
104,yy,CFO
在指定行后面添加信息
[root@oldboy63-libo oldboy]$ sed '2aoldboy' person.txt 
101,oldboy,CEO
102,zhaoyao,CTO
oldboy
103,Alex,COO
104,yy,CFO
105,feixue,CIO
============================================================================

[root@oldboy63-libo oldboy]$ sed 'aoldboy' person.txt  person.txt 
101,oldboy,CEO
oldboy
102,zhaoyao,CTO
oldboy
103,Alex,COO
oldboy
104,yy,CFO
oldboy
105,feixue,CIO
oldboy
101,oldboy,CEO
oldboy
102,zhaoyao,CTO
oldboy
103,Alex,COO
oldboy
104,yy,CFO
oldboy
105,feixue,CIO
oldboy
============================================================================
[root@oldboy63-libo oldboy]$ sed '$aoldboy' person.txt 
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
oldboy
在指定行前面添加信息
[root@oldboy63-libo oldboy]$ sed '2ioldboy' person.txt 
101,oldboy,CEO
oldboy
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
============================================================================
[root@oldboy63-libo oldboy]$ sed 'ioldboy' person.txt 
oldboy
101,oldboy,CEO
oldboy
102,zhaoyao,CTO
oldboy
103,Alex,COO
oldboy
104,yy,CFO
oldboy
105,feixue,CIO
============================================================================
[root@oldboy63-libo oldboy]$ sed '1ioldboy' person.txt 
oldboy
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
多行添加信息

连续多行

[root@oldboy63-libo oldboy]$ sed -e '2,4aoldboy' person.txt 
101,oldboy,CEO
102,zhaoyao,CTO
oldboy
103,Alex,COO
oldboy
104,yy,CFO
oldboy
105,feixue,CIO

不连续多行

[root@oldboy63-libo oldboy]$ sed -e '2aoldboy' -e '4aoldboy' person.txt 
101,oldboy,CEO
102,zhaoyao,CTO
oldboy
103,Alex,COO
104,yy,CFO
oldboy
105,feixue,CIO

直接添加多行内容

[root@oldboy63-libo oldboy]$ sed '2aoldboy\noldgirl\noldbaby' person.txt 
101,oldboy,CEO
102,zhaoyao,CTO
oldboy
oldgirl
oldbaby
103,Alex,COO
104,yy,CFO
105,feixue,CIO
删除指定信息

按行删除指定信息

[root@oldboy63-libo oldboy]$ sed '4d' person.txt 
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
105,feixue,CIO
[root@oldboy63-libo oldboy]$ sed -r '/Alex|oldboy/d' person.txt 
102,zhaoyao,CTO
104,yy,CFO
105,feixue,CIO

删除/etc/service文件中注释和空行
sed -r '/^$|^#d' /etc/services
sed -rn '/^$|^#/!p' /etc/services

替换操作

sed -r '/IPADDR/s#(IP.*=)10.0.0.2#\110.0.0.201#g' /etc/sysconfig/network-scripts/ifcfg-eth0
利用&实现后项应用前项正则匹配到的信息

[root@oldboy63-libo oldboy]$ echo "123456"|sed 's#[0-9]\+#<&>#g'
<123456>
[root@oldboy63-libo oldboy]$ echo "123456"|sed -r 's#[0-9]{1}#<&>#g'
<1><2><3><4><5><6>
利用sed取出IP地址

显示IP地址
ip a s eth0
ifconfig eth0
筛除指定行
ip a s etho0|sed -n '3p'
取出IP地址

[root@oldboy63-libo oldboy]$ ip a s eth0|sed -n '3p'|sed -r 's#^.*t (.*)#\1#g'|sed -r 's#(.*)/24.$#\1#g'
10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboy63-libo oldboy]$ ip a s eth0|sed -nr '3s#^.*t (.*)/24.*$#\1#gp'
10.0.0.200
利用sed获取文件属性权限数值
[root@oldboy63-libo oldboy]$ stat /etc/hosts|sed -n '4p'|sed -r 's#^A.*\((.*)/-.*$#\1#g'
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 课程知识回顾(提问环节) 通配符号 * {}通配符号主要用于匹配文件名称正则符号正则符号主要用于匹配文件内...
    威士忌酸WhiskySour阅读 3,287评论 0 0
  • 一、前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等。如果我们相对这些文件进行一些...
    以七v为书阅读 5,408评论 0 5
  • Day 15 作者:翟玉龙 归档:课堂笔记 2019/3/20 快捷键: Ctrl + 1 标题1 Ctrl + ...
    Linux_淡忘阅读 2,286评论 0 0
  • sed工具简介 用法:sed [-nefri] 动作参数:-n:使用安静模式(Silent)模式,一般在sed的...
    Bloo_m阅读 4,597评论 0 1
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 5,455评论 0 0