一,sed命令的用途

sed是Linux下一款功能强大的非交互流式文本编辑器,

可以对文本文件进行增、删、改、查等操作,

支持按行、按字段、按正则匹配文本内容。

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,查看sed所属的rpm包

[root@blog ~]$ whereis sed
sed: /usr/bin/sed/usr/share/man/man1/sed.1.gz /usr/share/man/man1p/sed.1p.gz /usr/share/info/sed.info.gz [root@blog ~]$ rpm -qf /usr/bin/sed
sed-4.5-1.el8.x86_64

如果找不到sed命令或命令被误删除

可以用dnf安装

[root@blog ~]# dnf install sed

三,查看sed的版本和帮助

1,查看sed的版本

[root@blog ~]# sed --version
sed(GNU sed) 4.5
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Written by Jay Fenlason, Tom Lord, Ken Pizzini,
and Paolo Bonzini.
GNU sedhome page: <https://www.gnu.org/software/sed/>.
General help using GNU software: <https://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-sed@gnu.org>.

2,查看sed的帮助

[root@blog ~]# sed --help 

3,查看sed的手册

[root@blog ~]# man sed

四,sed功能之一:替换字符串

1,替换df空间已使用百分比的百分号%

#s:用来替换字符串

#g:在整行范围内进行替换

#如果没有g标记,则只替换每行第一个匹配到的字符串

[root@blog ~]# df -h | sed 's/%//g'
Filesystem Size UsedAvail Use Mounted on
devtmpfs 7.5G 0 7.5G 0 /dev
tmpfs 7.5G 0 7.5G 0 /dev/shm
tmpfs 7.5G 492K 7.5G 1 /run
tmpfs 7.5G 0 7.5G 0 /sys/fs/cgroup
...

2,例:把/etc/passwd中的root替换成liu并把所在行显示出来

#s:替换匹配到的字符串

#g:每行做全局匹配,否则每行只匹配遇到的第一个字符串

#p:打印

[root@blog ~]$ sed -n 's/root/liu/gp' /etc/passwd
liu:x:0:0:liu:/liu:/bin/bash

3,运维中的例子:得到ip地址:

先查看ip的情况

[root@blog ~]# ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:16:7c:a5 brd ff:ff:ff:ff:ff:ff
inet 172.17.165.21/20 brd 172.17.175.255 scope global dynamic noprefixroute eth0
valid_lft 311890844sec preferred_lft 311890844sec

用sed得到ip

[root@blog ~]# ip a show eth0 | grep inet | sed 's/inet //' | sed 's/\/[0-9][0-9] brd.*$//g'
172.17.165.21

用awk得到ip

[root@blog ~]# ip a show eth0 | grep inet | awk '{print $2}' | awk -F/ '{print $1}'
172.17.165.21

这个例子说明如果获取某列的信息,用awk更简单一些,

这里只是为了举例子演示sed的功能

五,sed功能之二:删除指定的行

1,例子:打印每个分区和使用的占比,字段之间用-分隔

#sed '1d' :,删除df结果中第一行的表头,d:删除

#--output-delimiter='-' 输出时的分隔符也可以指定

#tr -d '%'   去掉百分比符号

[root@blog ~]$ df -h | sed '1d' | tr -s ' ' | cut -d ' ' -f 1,5 --output-delimiter='-' | tr -d '%'
devtmpfs-0
tmpfs-0
tmpfs-1
tmpfs-0
/dev/vda1-15
/dev/vdb1-35

2,删除包含某字符串行

例:不显示所有包含tmpfs的文件系统

[root@blog ~]# df -h | sed '/tmpfs/d'
Filesystem Size UsedAvail Use% Mounted on
/dev/vda1 100G 15G 86G 15% /
/dev/vdb1 500G 3.6G 497G 1% /databak

六,功能之三:打印匹配到的行

1,打印包含root字串的行

#-n: --quiet, --silent,只打印影响到的行

[root@blog ~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash

2,打印指定的行

只打印第一行:

#p:打印

[root@blog ~]# sed -n '1p' /etc/passwd

打印1至3行

[root@blog ~]# sed -n '1,3p' /etc/passwd

七,功能之四:执行多项编辑操作

#-e:执行一项操作

#5,$d:  删除从第5行到最末尾一行

#s/root/lhd/gp    把每行中匹配上的root替换成lhd并打印出来

[root@blog ~]# sed -e '5,$d' -e 's/root/lhd/gp' /etc/passwd

八,功能之五:在指定行显示后退出

#q:在指定行显示之后退出

#5q:在第5行显示后退出

[root@blog ~]# sed '5q' /etc/passwd

九,功能之六:遍历修改文件

1,修改单个文件的内容:

例:替换index.html中的'五二零'为'520'

#-i: 修改文件的内容

   [root@blog 520]# sed -i 's/五二零/520/g' index.html

2,批量替换文件

例:把/data/dev/think_file/html/520/目录下所有包含'五二零'的文件中的'五二零'为'520'

#-r: 遍历子目录查找

#-l:结果只显示文件名

[root@blog 520]# sed -i 's/五二零/520/g' `grep 五二零 -rl /data/dev/think_file/html/520`

十,查看centos的版本

[root@blog ~]$ cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)

最新文章

  1. 一篇通俗易懂的CSS层叠顺序与层叠上下文研究
  2. 【leetcode】Factorial Trailing Zeroes(easy)
  3. 20145213祁玮のJava课程总结
  4. Leetcode Evaluate Reverse Polish Notation
  5. 北工大耿丹学院16级计科院3班C语言课程助教学期总结
  6. Nhibernate详解
  7. Windows Server 2008 R2 64bit兼容Chrome浏览器
  8. Javascript中字符串转换成Date的方法
  9. Devexpress Barmanager设置
  10. JavaScript基本概念(变量和数据类型)
  11. Linux系统环境变量的四个配置文件的关系
  12. Spring Boot应用 打包与部署指南
  13. 搭建IIS并配置网站之旅
  14. MFC开发(一)简单同步时间应用程序
  15. Educational Codeforces Round 36
  16. POJ 1655.Balancing Act 树形dp 树的重心
  17. Incorrect Invoice Ref.
  18. Python模块:time模块详解(转)
  19. [转]单据套打WINFORM实现,带预览功能
  20. 为JSP写的一套核心标签

热门文章

  1. Dockerfile使用,示例
  2. Cutting Game(POJ 2311)
  3. 使用phoenix连接hbase
  4. hystrix熔断器之线程池
  5. Mac使用Charles给iPhone抓包流程
  6. JVM参数总结
  7. Java10新特性
  8. Redis学习(二)redis的特点
  9. O、Θ、Ω
  10. phpcms v9.6.0任意文件上传漏洞