当前位置:首页 > Liunx > 正文内容

shell三剑客之sed-06

邓鹏10个月前 (01-13)Liunx275

学习sed的关键是要搞清楚,它是一个==编辑器==,编辑器常见的功能有:

  • 删除

  • 打印

  • 增加

  • 替换(修改)

sed参数
-e 进行多项编辑,即对输入行应用多条sed命令时使用
-n 取消默认的输出
-r 使用扩展正则表达式
-i inplace,原地编辑(修改源文件)

sed操作
d 删除行
p 打印行
a 后面加行
i 前面加行
s 替换修改

#示例演练,指定删除第2行
# head  -5 /etc/passwd |cat -n |sed  2d

变量引用需要双引号
a=2					
head -5 /etc/passwd |cat -n |sed "$a"d	

删除第2行到第3行,中间的逗号表示范围
head -5 /etc/passwd |cat -n |sed  2,3d

删除第1行和第5行,中间为分号,表示单独的操作
head -5 /etc/passwd |cat -n |sed '1d;5d'

删除第1,2,4行, -e参数是把不同的多种操作可以衔接起来
head -5 /etc/passwd |cat -n |sed -e '2d;4d' -e '1d'


删除正则匹配到的行
head -n 5 /etc/passwd |cat -n |sed  '/oo/d'

删除以root开头的行
head -n 5 /etc/passwd |sed '/^root/d'

删除以bash结尾的行
head -n 5 /etc/passwd |sed '/bash$/d'

#使用i直接操作源文件修改,建议先不加参数进行修改,修改完没问题后,再加i参数进行源文件进行修改
#`sed -i`删除/etc/vsftpd/vsftpd.conf里所有的注释和空行
sed -i '/^#/d;/^$/d' /etc/vsftpd/vsftpd.conf

`sed -i`删除/etc/samba/smb.conf里所有的注释和空行
sed -i '/#/d;/;/d;/^$/d;/^\t$/d' /etc/samba/smb.conf

#打印行操作,打印第一行
head  -5 /etc/passwd |cat -n | sed  1p
     1  root:x:0:0:root:/root:/bin/bash				# 会在原来5行的基础上再打印第1行
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

head  -5 /etc/passwd |cat -n | sed -n 1p			# 正确做法加一个-n参数
     1  root:x:0:0:root:/root:/bin/bash

打印第一行和第四行
head  -5 /etc/passwd |sed -ne '1p;4p'

打印~4行
head  -5 /etc/passwd |sed -ne '1,4p'

打印正则匹配到的行,打印有root关键字的行
head -5 /etc/passwd |sed -n '/root/p'


#增加行操作
sed -i '2a33333' 1.txt    #在文本1.txt文本第2行后增加33333这一行,其中2a代表插入到第二行后 ,如果第一行插入请把2a改成li 

也可以使用正则匹配到的行后面增加一行。
sed -i '/^4/accccc' 1.txt     #表示在4开头的行的后一行加上ccccc这一行


#修改替换操作
替换每行里的第1个匹配字符
head  -5 /etc/passwd |sed 's/:/===/'    #如果要替换每一行所有匹配的,请后面加g   head  -5 /etc/passwd |sed 's/:/===/g'
root===x:0:0:root:/root:/bin/bash
bin===x:1:1:bin:/bin:/sbin/nologin
daemon===x:2:2:daemon:/sbin:/sbin/nologin
adm===x:3:4:adm:/var/adm:/sbin/nologin
lp===x:4:7:lp:/var/spool/lpd:/sbin/nologin

替换2~4行
head  -5 /etc/passwd |sed '2,4s/:/===/g'

替换2行和4行
head  -5 /etc/passwd |sed '2s/:/===/g;4s/:/===/g'

注意后面的数字是2,前面替换了1个,剩下的里面替换第2个也就是原来的第3个
head  -5 /etc/passwd |sed '2s/:/===/;2s/:/===/2'
root:x:0:0:root:/root:/bin/bash
bin===x:1===1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin


#使用正则匹配替换
替换以daemon开头的那一行
head -5 /etc/passwd |sed '/^daemon/s/:/===/g'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon===x===2===2===daemon===/sbin===/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin


扫描二维码推送至手机访问

版权声明:本文由PowerShell中文社区发布,如需转载请注明出处。

本文链接:https://www.powershell.com.cn/?id=33

分享给朋友:

“shell三剑客之sed-06” 的相关文章

Shell脚本介绍

Shell脚本介绍

今日目标了解Shell脚本概念磁盘相关命令回顾:磁盘相关命令说明fdisk分msdos分区与要看系统硬盘与分区情况lsblk查看块设备与其挂载情况df -h查看已经挂载的文件系统情况mount也是查看挂载的情况,还能看到挂载的参数(ro或rw等)iostat需要安装sysstat软件包,动态查看磁盘...

Liunx定时计划任务配置说明

Liunx定时计划任务配置说明

在 Linux 中,* 代表通配符,用于表示任意值。在 cron 任务中,* 可以用来指定分钟、小时、日期等时间单位的取值。具体而言,cron 表达式由五个时间字段组成,分别表示分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)和星期几(0-7,其中0和7都表示星期日)。这些时间...

CentOS7 服务器上使用T4显卡部署大型AI模型的详细教程

CentOS7 服务器上使用T4显卡部署大型AI模型的详细教程

环境准备服务器配置CPU:Platinum8225c 显卡T4 GPU:T4 16GB  CPU:8核 内存32GB操作系统:Centos7.6英伟达显卡驱动Docker容器环境Docker使用的NVIDIA驱动Ollama容器镜像,Ollama支持的显卡型号:点击查看查看运行环境的资源使...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。