Shell脚本文本三剑客之Sed
目录
一、Sed编辑器
1.sed的介绍
2.Sed工作流程
3.sed工作原理
4.sed命令常见用法
5.Sed常用选项
6.sed命令的常用操作
二、Sed命令使用
1.打印内容
示例1:打印全部内容
示例2:查看文件,打印全部内容
示例3:打印指定行内容
示例4:根据地址,打印指定多行内容
示例5:打印多行后退出
示例6:打印最后一行,使用通配符$
示例7:支持正则表达式
示例8:过滤关键字
示例9:‘#,/关键字/p’ 从第#行开始匹配
示例10:‘/关键字/,#’ 找到第#个关键字为止
示例11: 打印文本的奇数和偶数行。
2.删除内容
示例1:删除指定行
示例2:删除指定的多行
示例3: 删除文本中的空行
示例4: 删除以指定字符结尾的行及取反。
示例5:先备份内容再删除
3.插入内容
示例1:在指定行后插入
示例2:插入空行,修改文件的换行,要多加一个\
示例3:替换
4.取反
5.搜索替代
示例1:修改selinux开机不自启配置文件
6.分组调用
示例1:
示例2:提取IP地址
示例3:@和/效果一样
一、Sed编辑器
1.sed的介绍
sed编辑器时一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于shell脚本中,用以完成各种自动化处理任务。
2.Sed工作流程
sed 的工作流程主要包括读取、执行和显示三个过程: 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行。 显示font>:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
PS:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。
3.sed工作原理
过程:
读入新的一行内容到缓存空间;
从指定的操作指令中取出第一条指令,判断是否匹配pattern;
如果不匹配,则忽略后读的编辑命令,回到第2步继续取出下一条指令;
如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;
当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;
当所有行都处理完之后,结束;
4.sed命令常见用法
通常情况下调用sed命令有两种格式,如下所示。
其中,"参数"是指操作的目标文件,当存在多个操作对象时用,文件之间用逗号" ,"分隔;而 scriptfile表示脚本文件,需要用"-f"选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。
sed -e '操作' 文件1 文件2sed -n -e '操作' 文件1 文件2 sed -f 脚本文件 文件1 文件2 sed -i -e '操作' 文件1 文件2
5.Sed常用选项
-e 或 - -expression=∶ 多点编辑-f 或- -file=∶表示用指定的脚本文件来处理输入的文本文件。-h 或- -help∶显示帮助。-n∶ 不输出模式空间内容到屏幕,即不自动打印,加p,又恢复自动打印-i∶ 备份文件文件并原处编辑-r:使用扩展正则表达式
6.sed命令的常用操作
"操作"用于指定对文件操作的动作行为,也就是sed的命令。通常情况下是采用的"[n1 [,n2] ]"操作参数的格式。n1、n2是可选的,代表选择进行操作的行数,如操作需要在5~20行之间进行,则表示为"5,20动作行为”。
s∶替换,替换指定字符。d∶删除,删除选定的行。a∶ 增加,在当前行下面增加一行指定内容。i∶ 插入,在选定行上面插入一行指定内容。c∶ 替换,将选定行替换为指定内容。Y∶ 字符转换,转换前后的字符长度必须相同。p∶ 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容; 如果有非打印字符,则以 AscII码输出。其通常与_n"选项一起使用。=∶打印行号。l(小写L)∶打印数据流中的文本和不可打印的ASCII字符(比如结束符s、制表符\t)
二、Sed命令使用
1.打印内容
示例1:打印全部内容
sed ‘ ’交互模式输入一行,自动打印一行相同的
sed -n ‘ ’ 交互模式输入一行,关闭自动打印
sed -n ‘ p’加上p又恢复自动打印
[root@yxp opt]#sed ' '
11
11
22
22
33
33
44
44
[root@yxp opt]#sed -n ' '
11
22
33
[root@yxp opt]#sed -n ' p'
11
11
22
22
33
示例2:查看文件,打印全部内容
#法一:
[root@yxp opt]#sed ' ' /etc/fstab #
# /etc/fstab
# Created by anaconda on Sat Sep 4 02:48:23 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=183ca7c7-1989-4f43-9e81-d2676192f5a4 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /mnt xfs defaults 0 0#法二
[root@yxp opt]#sed -n ' p' /etc/fstab #
# /etc/fstab
# Created by anaconda on Sat Sep 4 02:48:23 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=183ca7c7-1989-4f43-9e81-d2676192f5a4 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb1 /mnt xfs defaults 0 0
示例3:打印指定行内容
##例如:打印第四行内容
[root@yxp opt]#sed -n ' 4p' /etc/fstab
# Created by anaconda on Sat Sep 4 02:48:23 2021[root@yxp opt]#ifconfig ens33|sed -n '2p'inet 192.168.59.102 netmask 255.255.255.0 broadcast 192.168.59.255
示例4:根据地址,打印指定多行内容
#打印2-4行
[root@yxp opt]#ifconfig ens33|sed -n '2,4p'inet 192.168.59.102 netmask 255.255.255.0 broadcast 192.168.59.255inet6 fe80::ecee:9f8a:52de:5871 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:3e:22:fe txqueuelen 1000 (Ethernet)#打印2行加4行,就是打印第二行到第6行
[root@yxp opt]#cat -n /etc/passwd|sed -n '2,+4p'2 bin:x:1:1:bin:/bin:/sbin/nologin3 daemon:x:2:2:daemon:/sbin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync
示例5:打印多行后退出
[root@yxp opt]#sed '3q' /etc/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
示例6:打印最后一行,使用通配符$
[root@yxp opt]#sed -n '$p' /etc/passwd
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
示例7:支持正则表达式
#查找基本格式:
sed -n '//,//p' 文件名
第一个//表示开头位置,第二个//表示结尾位置
[root@yxp opt]#sed -n '/^r/,/^f/p' /etc/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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
yxp:x:1000:1000:yxp:/home/yxp:/bin/bash
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
示例8:过滤关键字
[root@yxp opt]#sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
示例9:‘#,/关键字/p’ 从第#行开始匹配
[root@yxp opt]#sed -n '2,/root/p' /etc/passwd
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
示例10:‘/关键字/,#’ 找到第#个关键字为止
[root@yxp opt]#sed -n '/root/,3p' /etc/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
operator:x:11:0:operator:/root:/sbin/nologin
示例11: 打印文本的奇数和偶数行。
[root@yxp opt]#seq 10 |sed -n '1~2p'
1
3
5
7
9
[root@yxp opt]#seq 10 |sed -n '2~2p'
2
4
6
8
10
[root@yxp opt]#seq 10 |sed '1~2d'
2
4
6
8
10
[root@yxp opt]#seq 10 |sed '2~2d'
1
3
5
7
9
2.删除内容
示例1:删除指定行
#删除指定行并不是真正删除,只是将删除了的结果显示出来,并不是真正删除了
[root@yxp opt]#cat seq.txt
1
2
3
4
5
6
7
8
9
10
[root@yxp opt]#cat seq.txt |sed '3d'
1
2
4
5
6
7
8
9
10
[root@yxp opt]#cat seq.txt
1
2
3
4
5
6
7
8
9
10
示例2:删除指定的多行
[root@yxp opt]#sed '2,4d' seq.txt
1
5
6
7
8
9
10
示例3: 删除文本中的空行
[root@yxp ~]#sed '/^$/d' /opt/seq.txt
1
2
3
4
5
6
7
8
9
10
[root@yxp ~]#
示例4: 删除以指定字符结尾的行及取反。
[root@yxp ~]#sed '/nologin$/!d' /etc/passwd
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
示例5:先备份内容再删除
[root@yxp opt]#sed -i.bak '3d' seq.txt
[root@yxp opt]#cat seq.txt
1
2
4
5
6
7
8
9
10
[root@yxp opt]#cat seq.txt.bak
1
2
3
4
5
6
7
8
9
10
3.插入内容
示例1:在指定行后插入
[root@yxp opt]#cat seq.txt
1
2
4
5
6
7
8
9
10
[root@yxp opt]#sed -i '2a hehe' seq.txt
[root@yxp opt]#cat seq.txt
1
2
hehe
4
5
6
7
8
9
10
示例2:插入空行,修改文件的换行,要多加一个\
[root@yxp opt]#cat seq.txt
1
2
hehe
4
5
6
7
8
9
10
[root@yxp opt]#sed -i '2a\\n hehe' seq.txt
[root@yxp opt]#cat seq.txt
1
2hehe
hehe
4
5
6
7
8
9
10
示例3:替换
[root@yxp opt]#sed -i '2chahahaha' seq.txt
[root@yxp opt]#cat seq.txt
1
hahahahahehe
hehe
4
5
6
7
8
9
4.取反
[root@yxp opt]#seq 10|sed -n '2!p'
1
3
4
5
6
7
8
9
10
5.搜索替代
格式:格式:sed 行范围 s/旧字符串/新字符串/替换标记
替换标记:
数字:表明新字符串将替换第几处匹配的地方
g : 表明新字符串将会替换所有匹配的地方
p : 打印与替换命令匹配的行,与 -n 一起使用
w 文件 :将替换的结果写到文件中
示例1:修改selinux开机不自启配置文件
[root@yxp opt]#sed -i 's/SELINUX=enabled/SELINUX=disabled/' /etc/selinux/config
示例2:修改多行,使用r 以及-e
[root@yxp opt]#sed -ri -e 's/SELINUX=disabled/SELINUX=enabled/' /etc/selinux/config -e 's/SELINUXTYPE=targeted/SELINUXTYPE=111/' /etc/selinux/config
示例3:修改全局,后面加g
[root@yxp opt]#sed -i 's/root/admin/g' passwd
6.分组调用
示例1:
#分组使用()(),调用第一段使用\1
[root@yxp opt]#echo 11aaxx |sed -r 's/(11)(aa)(xx)/\1/'
11
#调用第2个分组
[root@yxp opt]#echo 11aaxx |sed -r 's/(11)(aa)(xx)/\2/'
aa
#调用所有分组
[root@yxp opt]#echo 11aaxx |sed -r 's/(11)(aa)(xx)/\1\2\3/'
11aaxx
示例2:提取IP地址
[root@yxp ~]#ifconfig ens33 |sed -rn '2s/.*(inet) ([0-9.]+) (netmask) ([0-9.]+) (broadcast) ([0-9.]+).*/\2/p'
192.168.72.12
示例3:@和/效果一样
[root@yxp ~]#echo /etc/sysconfig/network-scripts/ifcfg-ens33 |sed -nr 's@^(.*)/([^/]+)@\2@p'
Shell脚本文本三剑客之Sed相关推荐
- shell脚本文本三剑客之awk
目录 一.AWK简介 AWK工作原理 awk的适用场景 AWK命令的基本格式 常见的内建变量(可直接用) awk常识 二.操作例子 awk的将文件分成字段 打印行 打印1-3行 打印1和3行 输出偶数 ...
- sed 插入多行_文本三剑客之sed
文本三剑客之sed sed介绍 sed 简介 sed 流编辑器.sed的全称:Stream EDitor 简称sed 是个流编辑器,sed是一个行编辑器.首先它是个流编辑器是实现文本流编辑的,所谓行编 ...
- linux运维实战练习及linux shell脚本、awk、sed工具命令学习总结
一.linux shell 脚本 1.描述shell程序的运行原理(可附带必要的图形说明): Linux系统的shell作为操纵系统的外壳,为用户提供使用操纵系统的接口.它是命令语言.命令解释程序及程 ...
- shell脚本详解(十)——sed编辑器的使用方法
shell脚本详解(十)--sed编辑器的使用方法 一.sed编辑器 二.sed编辑器工作流程 1.读取: 2.执行: 3.显示: 4.注: 三.命令格式 四.常用选项 五.常用操作 六.使用地址 s ...
- 文本三剑客之sed命令--文本替换;grep命令---文本过滤
目录 1.sed简介 2.sed的p命令--打印匹配行 3.sed的d命令--删除指定行 4.sed的a命令--在匹配行后面追加 5.sed的i命令--在匹配行前面插入 6.sed的c命令--整行替换 ...
- 文本三剑客之——sed编辑器
sed编辑器 sed编辑器 sed基础语法 sed查询 sed删除 sed 替换 sed 插入 sed编辑器 sed是文本处理工具,依赖于正则表达式,可以读取文本内容,工具指定条件对数据进行添加.删除 ...
- Linux文本三剑客之sed仗剑走天涯
一,sed是什么? sed是Strem Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.对文件内容逐行(行编辑器,一行读取一次,对行编辑)进行处理调用操作并显示到STDOUT,常用 ...
- shell脚本——文本编辑器sed(详细讲解)
每日分享: 再长的路,一步步也能走完:再短的路,不迈开双腿也无法到达. 文章目录 一.定义 二.工作流程 三.基本用法 1.格式 2.常用选项 3.常用操作 四.sed命令使用--打印内容 1.只打印 ...
- Linux文本三剑客之sed
sed命令详解 一.简介 二.工作原理 三.用法 1.地址定界 2.编辑命令 四.实例及详解 一.简介 sed是一种新型的,非交互式的流式(从上往下读取一行处理一行)的编辑器 可以执行vi和ex相同的 ...
- shell脚本、awk、sed用法
shell sed awk 什么是shell 翻译官 内核与用户之间的解释器程序(/bin/bash) shell种类 配置文件:/etc/shells/bin/sh/bin/bash/sbin/no ...
最新文章
- JS中for循环里面的闭包问题的原因及解决办法
- 如何获取Google地图API密钥?(翻译版)
- Office - 安装程序找不到office.zh-cn\*.文件
- cygwin下的gcc-4.7.1编译心得
- java 柱状图 宽度_Java实现 LeetCode 84 柱状图中最大得矩形
- PowerDesigner中的CDM设计的外键作主键的问题
- 计算机改网络id,Windows 8普通版移除“网络ID”修改功能
- python机器学习库sklearn——交叉验证(K折、留一、留p、随机)
- 现在流行「毕业式」裁员吗?
- 英特尔显示器音频_联想YOGA C940英特尔移动超能笔记本评测:小身材也有大能量...
- 天气/气象相关公开数据集
- Hspice 反相器仿真
- MATLAB-插值算法汇总
- Autoware Docker安装和仿真
- APP(IOS)蒲公英上传成功但下载页报错
- 怎样用电池给铁锅作防锈
- 华顺信安 白帽汇安全研究院二面复盘
- [RK3568 Android11] 开发之APP应用切换USB OTG模式
- Linux vim设定Tab键缩进
- STM32F103 485通信开发实例(二):与HMI建立初步通信