linux基础--sed编辑器详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

1、sed简介

  sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

  sed默认不编辑源文件,仅对模式空间中的数据作处理。处理结束后,将模式空间打印。

2、命令语法

1
sed  [options]  'command'  file (s)

3、命令使用示例

1
2
将data.inc.php中从mysql_dlevent到mysql_activation之间的root替换成killtr
sed  -i -e  "/mysql_dlevent/,/mysql_activation/s/root/killtr/"   config /data .inc.php

4、常见options选项

-n:静默模式,只显示符合条件的行,不再默认显示模式空间中的内容。

-i:直接修改原文件

-f /PATH/TO/SED_SCRIPT:将使用的脚本保存到文件中

-r:使用扩展正则表达式

-e SCRIPT -e SCRIPT:可同时执行多个脚本

1
2
3
4
[root@liang-study scripts] # sed -e '/^#$/d' -e '/^#[[:space:]]\{3,\}/d' /etc/inittab  
id :3:initdefault:
S0:12345:respawn: /sbin/agetty  ttyS0 115200
#-e示例,删除/etc/inittab中只有#的行和以#开头后至少有3个空格的行


5、常见command参数

 d:删除指定行

1
2
3
4
5
6
7
8
9
10
11
12
[root@liang-study scripts] # sed '1,2d' /etc/passwd
daemon:x:2:2:daemon: /sbin : /sbin/nologin
adm:x:3:4:adm: /var/adm : /sbin/nologin
#删除/etc/passwd中1-2行的数据
[root@liang-study scripts] # sed '3,$d' /etc/passwd
#删除/etc/passwd中第3行到最后一行的数据
[root@liang-study scripts] # sed '/root/d' /etc/passwd
#删除包含root的行
[root@liang-study scripts] # sed '1,+2d' /etc/passwd
#删除第一行和第一行后2行的数据
[root@liang-study scripts] # sed '/^\//d' /etc/fstab 
#删除以/开头的行,注意匹配的/需要转义

p:显示指定行

1
2
3
4
5
6
7
8
[root@liang-study scripts] # sed '/^\//p' /etc/fstab  
proc                     /proc                    proc    defaults        0 0
/dev/vdb                 /chenchao                ext4    defaults,usrquota,grpquota 1 2
/dev/vdb                 /chenchao                ext4    defaults,usrquota,grpquota 1 2
#注:上例为显示以/开头的行,需要注意的是默认目标文件中匹配的行显示两次,没有匹配的行显示一次,这是因为sed默认是读一行显示一行,而p匹配到的则会单独显示,因此就会匹配到的就会显示两次。可以使用sed选项来处理。
[root@liang-study scripts] # sed -n '/^\//p' /etc/fstab 
/dev/vdb                 /chenchao                ext4    defaults,usrquota,grpquota 1 2
#使用-n选项只显示匹配到的行。

a \string:在指定的行后追加新航,内容为string。

1
2
3
4
5
6
7
8
9
[root@liang-study scripts] # sed '/^\//a \#hello liang' /etc/fstab       
/dev/vdb                 /chenchao                ext4    defaults,usrquota,grpquota 1 2
#hello liang
#在/etc/fstab中以/开头的行后增加#hello liang
[root@liang-study scripts] # sed '/^\//a \#hello liang\n#hello linux' /etc/fstab    
/dev/vdb                 /chenchao                ext4    defaults,usrquota,grpquota 1 2
#hello liang
#hello linux
#在/etc/fstab中以/开头的行后增加两行

i \strig:在指定的行前追加新航,内容为string,用法和a \string一样。

r FILE:将指定文件的内容添加到符合条件的行后。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@liang-study scripts] # sed '/chenchao/r /etc/issue' /etc/fstab
/dev/vdb                 /chenchao                ext4    defaults,usrquota,grpquota 1 2
CentOS release 6.8 (Final)
Kernel \r on an \m
#将/etc/fstab中包含chenchao字符串的行后加入/etc/issue的内容
[root@liang-study scripts] # sed '$r /etc/issue' /etc/fstab          
/dev/vdb                 /chenchao                ext4    defaults,usrquota,grpquota 1 2
CentOS release 6.8 (Final)
Kernel \r on an \m
#将/etc/fstab中最后一行后加入/etc/issue的内容
[root@liang-study scripts] # sed '2r /etc/issue' /etc/passwd 
root:x:0:0:root: /root : /bin/bash
bin:x:1:1:bin: /bin : /sbin/nologin
CentOS release 6.8 (Final)
Kernel \r on an \m
#将/etc/passwd中第二行后加入/etc/issue的内容
[root@liang-study scripts] # sed '1,2r /etc/issue' /etc/passwd 
root:x:0:0:root: /root : /bin/bash
CentOS release 6.8 (Final)
Kernel \r on an \m
bin:x:1:1:bin: /bin : /sbin/nologin
CentOS release 6.8 (Final)
Kernel \r on an \m
#在第一行和第二行后面都添加/etc/issue的内容

w FILE:将指定范围内的内容另存至指定文件中

1
2
3
4
5
6
7
8
9
10
11
[root@liang-study scripts] # sed -n '/root/w /tmp/root.txt' /etc/passwd
[root@liang-study scripts] # cat /tmp/root.txt 
root:x:0:0:root: /root : /bin/bash
operator:x:11:0:operator: /root : /sbin/nologin
#将/etc/passwd中包含root的行另存至/tmp/root.txt中。
[root@liang-study scripts] # sed -n '1,3w /tmp/root.txt' /etc/passwd      
[root@liang-study scripts] # cat /tmp/root.txt                      
root:x:0:0:root: /root : /bin/bash
bin:x:1:1:bin: /bin : /sbin/nologin
daemon:x:2:2:daemon: /sbin : /sbin/nologin
#将/etc/passwd中第一行到第三行另存至/tmp/root.txt中。

s/pattern/string/:查找并替换,pattern支持正则表达式。默认只替换每行中第一次被模式匹配到的字符串

  s/pattern/string/g:全局替换

  s/pattern/string/i:忽略字符大小写

    同时s/pattern/string/也可以使用s#pattern#string#来表示。只要保证使用分隔符相同即可。且如果使用#或者@作为分割符时,在pattern或string中遇到/则无需转义了。

1
2
3
4
5
6
7
8
9
10
11
12
[root@liang-study scripts] # sed 's/root/ROOT/' /etc/passwd
ROOT:x:0:0:root: /root : /bin/bash
#将/etc/passwd中每行第一次包含root的字符串替换成ROOT
[root@liang-study scripts] # tail -1 /etc/fstab 
/dev/vdb                 /chenchao                ext4    defaults,usrquota,grpquota 1 2
[root@liang-study scripts] # sed 's/^\//#/' /etc/fstab 
#dev/vdb                /chenchao               ext4    defaults,usrquota,grpquota 1 2
#将/etc/passwd中行首为/的字符串替换成#,此处使用到了正则表达式。
[root@liang-study scripts] # sed 's/\//#/g' /etc/passwd
root:x:0:0:root: #root:#bin#bash
bin:x:1:1:bin: #bin:#sbin#nologin
#将/etc/passwd中所有/替换成#

  &:引用模式匹配到的整个串

1
2
3
4
5
6
7
8
9
10
11
[root@liang-study scripts] # cat sed.txt                  
hello,like
hi,my love
[root@liang-study scripts] # sed 's/l..e/&r/g' sed.txt     
hello,liker
hi,my lover
#将sed.txt包含l..e的字符串都替换成原有字符串并加r。
[root@liang-study scripts] # sed 's/\(l..e\)/\1r/g' sed.txt   
hello,liker
hi,my lover
#使用后向引用的方法来完成上述替换
1
2
3
4
5
6
sed  -i -e  "/mysql_dblib_ct01/,/q/s/.*DB_PASS.*/    'DB_PASS'   =>'daleevent123!'/"   ${web_dir} /config/data .inc.php
#替换包含指定字符串到文尾的一整行内容
[root@liang-study scripts] # history |sed 's/^[[:space:]]\{1,\}//'
#将history中行首的空格删除
[root@liang-study scripts] # history |sed 's/^[[:space:]]*//' | cut -d' ' -f1
#将history中行首的空格删除并取出第一列

本文转自  亮公子  51CTO博客,原文链接:http://blog.51cto.com/iyull/1884659

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
Ubuntu Linux 测试技术
Linux系统之部署轻量级Markdown文本编辑器
【10月更文挑战第6天】Linux系统之部署轻量级Markdown文本编辑器
175 1
Linux系统之部署轻量级Markdown文本编辑器
|
5月前
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
4月前
|
机器学习/深度学习 Linux Perl
Linux文本处理三剑客之sed详解
这篇博客详细讲解了Linux中的文本处理工具sed的使用方法和常用命令。
281 9
Linux文本处理三剑客之sed详解
|
4月前
|
Linux Perl
Linux之sed命令
Linux之sed命令
|
4月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
859 2
|
4月前
|
Linux Perl
6-20|linux sed命令
6-20|linux sed命令
|
5月前
|
搜索推荐 Linux 网络安全
Linux系统中的Vim编辑器
【8月更文挑战第21天】Vim是一款功能强大的文本编辑器,在Linux系统中广泛使用。它具有三种基本模式:命令模式,用于执行操作但不能编辑文本;插入模式,允许用户像常规编辑器那样输入文本;底线命令模式,用于保存、退出及查找替换等操作。Vim还支持多窗口编辑、宏录制及插件扩展等功能,并可通过配置文件个性化设置。因其高效性、良好的可移植性和远程编辑能力,Vim特别适用于开发者和系统管理员。
|
5月前
|
Linux Shell Perl
在Linux中,如何使用sed命令进行文本替换?
在Linux中,如何使用sed命令进行文本替换?
|
5月前
|
数据采集 运维 监控
运维笔记:流编辑器sed命令用法解析
运维笔记:流编辑器sed命令用法解析
76 5
|
6月前
|
搜索推荐 Linux 开发工具