sed命令

sed命令

一、sed的定义
1、sed:是一个文本字符串流进行过滤和转换(替换和删除)的编辑器
2、sed的使用
[root@xiaoliu lianxi]# cat fan.txt 
    wo ai chi fan ming you
    fan ming you fan ming you
[root@xiaoliu lianxi]# sed -i '/^fan/ s/fan/liu/g' fan.txt 
[root@xiaoliu lianxi]# cat fan.txt 
	wo ai chi fan ming you
	liu ming you liu ming you
[root@xiaoliu lianxi]# sed -i 's/you//g' fan.txt 
[root@xiaoliu lianxi]# cat fan.txt 
    wo ai chi fan ming 
    liu ming  liu ming 
二、sed里的两种空间
1、pattern space:加工车间
2、hold space:临时仓库

在这里插入图片描述

三、sed的语法命令格式

在这里插入图片描述

1、三种命令格式:
1、sed [选项] sed编辑命令 输入文件
2、shell 命令 | sed [选项] sed编辑命令
3、sed [选项] -f sed脚本文件 输入文件
四、sed的常用选项

在这里插入图片描述

1、-n 只显示匹配处理的行(否则会输出所有)
#输出第8[root@localhost 76]# sed -n '8p' /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
#输出第一行和最后一行
[root@localhost 76]# sed -n '1p;$p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
mengmeng2:x:1014:1014::/home/mengmeng2:/bin/bash
2、-i 直接在文件中进行修改,而不是输出到屏幕
[root@localhost 76]# cat fan.txt
wo ai chi fan ming you
fan ming you  fan ming you
[root@localhost 76]# sed -i '/^fan/ s/fan/liu/g' fan.txt
[root@localhost 76]# cat fan.txt
wo ai chi fan ming you
liu ming you  liu ming you
[root@localhost 76]#
[root@localhost 76]# sed -i 's/you//g' fan.txt
[root@localhost 76]# cat fan.txt
wo ai chi fan ming
liu ming   liu ming
3、-r 支持扩展正则----》(+ | {} )
五、sed里常用的编辑命令

在这里插入图片描述

1、p命令的练习:
#不连续的输出135行的内容,;表示命令连接符
[root@liuhongjie lianxi]# sed -n '1p;3p;5p;' passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

#从第1行到第5行的内容
[root@liuhongjie lianxi]# sed -n '1,5p' passwd 
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,每次增加2
[root@liuhongjie lianxi]# cat -n /etc/passwd|sed -n '1~2p'
     1	root:x:0:0:root:/root:/bin/bash
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    11	games:x:12:100:games:/usr/games:/sbin/nologin
    13	nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
    15	systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
	…………
	
[root@liuhongjie lianxi]# cat -n /etc/passwd|sed -n '2~2p'
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     8	halt:x:7:0:halt:/sbin:/sbin/halt
    10	operator:x:11:0:operator:/root:/sbin/nologin
    12	ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    14	dbus:x:81:81:System message bus:/:/sbin/nologin
    16	systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
    18	polkitd:x:998:996:User for polkitd:/:/sbin/nologin
    20	sssd:x:996:993:User for sssd:/:/sbin/nologin
    22	liuhongjie:x:1001:1001::/home/liuhongjie:/bin/bash
    24	caohx:x:1004:1004::/home/caohx:/bin/bash

2、shell的变量在sed里面的使用,用双引号引起来
[root@xiaoliu lianxi]# num1=5
[root@xiaoliu lianxi]# num2=15
[root@xiaoliu lianxi]# sed -n "${num1}p;${num2}p" /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
3、a和i操作

在行首和行尾添加内容,使用替换操作,使用^和$元字符

4、s操作
[root@localhost 76]# cat fan.txt
wo ai chi fan ming you
fan ming you  fan ming you
[root@localhost 76]# sed -i '/^fan/ s/fan/liu/g' fan.txt
[root@localhost 76]# cat fan.txt
wo ai chi fan ming you
liu ming you  liu ming you
[root@localhost 76]#
[root@localhost 76]# sed -i 's/you//g' fan.txt
[root@localhost 76]# cat fan.txt
wo ai chi fan ming
liu ming   liu ming
5、模式匹配
[root@xiaoliu lianxi]# cat cat.txt 
i have a "fat" big "cat" 4376
i have a "fat" big "cat" 7887
i have a "fat" big "cat" 456
i have a "fat" big "cat" 123
i have a "fat" big "cat" 789

[root@xiaoliu lianxi]# sed -i -r 's/\<[0-9]{3}\>/&0/g' cat.txt 
[root@xiaoliu lianxi]# cat cat.txt 
i have a "fat" big "cat" 4376
i have a "fat" big "cat" 7887
i have a "fat" big "cat" 4560
i have a "fat" big "cat" 1230
i have a "fat" big "cat" 7890
6、sed里面的分组标签
[root@localhost 76]# echo aaa bbb 1234  |sed -r 's/([a-z]+) ([a-z]+) ([0-9]+)/\3 \2 \1/'
1234 bbb aaa
[root@localhost 76]#
[root@localhost 76]# echo aaa bbb 1234  |awk '{print $3,$2,$1}'
1234 bbb aaa
六、练习
练习1、
复制/etc/hosts文件到当前目录下,然后进行操作
1.在每行前面加一个字符串sanchuang
2.自己编辑一个文件test.txt,内容如下:
	0.0.0.0
	1.1.1.1
	2.2.2.2
	输出以下形式:
		0.0.0.0:80,1.1.1.1:80,2.2.2.2:80
1[root@xiaoliu lianxi]# cat test.txt |sed -n 'N;N;s/\n/:80,/g;s/$/:80/p'
0.0.0.0:80,1.1.1.1:80,2.2.2.2:80
练习2、
1.sed取出/etc/passwd文件的第一列
		sed -n '1p' /etc/passwd
	2.sed将PATH环境变量中的冒号换成换行  ->可以将PATH变量的内容重定向到一个文件里,例如path.txt
		sed -i 's/:/\n/g' path.txt
	3.sed将PATH环境变量斜杠/换成斜杠\
		sed -i 's/\//\\/g' path.txt
	4.sed修改SELINUX配置文件从开启(enforcing)变成禁用(disabled)
	/etc/sysconfig/selinux
		sed -i '/^SELINUX=/ s/enforcing/disabled/' 
	5.去掉/etc/passwd文件中第二个字段的x
		sed -i 's/x//g' passwd
	6.将/etc/sysconfig/network-scripts/ifcfg-ens33里的ONBOOT=no修改为yes
		sed -i '/^ONBOOT/ s/yes/no/' ifcfg-ens33 
	7.只显示ip add的ip地址
		ip add|sed -nr '/ens33$/ s#([a-z ]+) (([0-9]+\.){3}[0-9]+/[0-9]{2}) (.*)#\2#p'
	8.复制/etc/ssh/sshd_config到当前目录下,修改里面的端口号修改为8899,将#Port 22 配置修改为Port 8899 要求去掉前面的#号,将22修改为8899
			sed -i '/^#Port/ c Port 8899' sshd_config
  9.给下列含有大写字母的行,在大写字母后追加数字2022  --》sed
   abcdSdddde
   islHishbxld
   goBkefji
   daanshXxge
不要直接对上面的源文件进行操作,建议复制到当前文件夹里进行
	sed -ir 's/[A-Z]/&2022/g' test.txt
答案:
1[root@liuhongjie lianxi]# sed -n '1p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
2[root@liuhongjie lianxi]# cat path.txt 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root
[root@liuhongjie lianxi]# sed -i 's/:/\n/g' path.txt 
[root@liuhongjie lianxi]# cat path.txt 
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root
3[root@liuhongjie lianxi]# cat path.txt 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root
[root@liuhongjie lianxi]# sed -i 's/\//\\/g' path.txt 
[root@liuhongjie lianxi]# cat path.txt 
\usr\local\sbin:\usr\local\bin:\usr\sbin:\usr\bin:\root
4[root@xiaoliu lianxi]# sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config 
[root@xiaoliu lianxi]# cat /etc/selinux/config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
5、sed -i 's/x//g' passwd
6[root@xiaoliu lianxi]# sed -i '/^ONBOOT/ s/yes/no/' ifcfg-ens33 
[root@xiaoliu lianxi]# cat ifcfg-ens33 
BOOTPROTO=none	#设置网卡静态配置ip地址,none静态配置(手工指向ip)DHCP表示虚拟机动态获得ip地址
NAME=ens33	#网卡的设备名为ens33
DEVICE=ens33	#网卡的设备名为ens33
ONBOOT=no	#开机自启动网卡--》自动激活网卡
7[root@liuhongjie lianxi]# ip add|sed -nr '/ens33$/ s#([a-z ]+) (([0-9]+\.){3}[0-9]+/[0-9]{2}) (.*)#\2#p'
192.168.243.128/24
8、sed -i '/^#Port/ c Port 8899' sshd_config
9[root@liuhongjie lianxi]# cat test.txt 
   abcdSdddde
   islHishbxld
   goBkefji
   daanshXxge
[root@liuhongjie lianxi]# sed -ir 's/[A-Z]/&2022/g' test.txt 
[root@liuhongjie lianxi]# cat test.txt 
   abcdS2022dddde
   islH2022ishbxld
   goB2022kefji
   daanshX2022xge
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值