Linux shell基础(五)sed命令

简介:

一、sed命令

sed是一种强大的流式编辑器 (stream editor for filtering and transforming text),它能够完美的使用正则表达式,逐行处理文本并把结果显示到屏幕上。sed的强项是替换文本中的特定字符,而写shell有个步骤就是从一段文本中截取一段字符进行处理,所以熟练掌握sed命令是写shell脚本的基本技能。

用法:
sed [选项]... {脚本(如果没有其他脚本)} [输入文件]
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

选项:
-p 查找
-d 删除
-s 替换

二、sed 匹配搜索用法

sed可以向grep一样查找文件文本中包含关键字的行并把改行显示在屏幕上。
命令写法:sed -n '/(匹配的字符串)/'p 文件名(简记为-np)

1、搜索passwd文件中包含root关键字的行。

sed -n '/root/'p passwd

Linux  shell基础(五)sed命令

2、搜索ssh文件中以#开头的行

sed -n '/^#/'p ssh

Linux  shell基础(五)sed命令

3、搜索正则'o+t'类型的行

sed -nr ‘/o+t/’p passwd

Linux  shell基础(五)sed命令
注意“+”号属于扩展正则,需要跟-r选项才能用

4、搜索正则‘两次o’的行

sed -nr '/o{2}/'p passwd

Linux  shell基础(五)sed命令

5、搜索正则root或者bus的行‘root|bus’

sed -nr '/root|bus/'p passwd

Linux  shell基础(五)sed命令

6、不区分大小写搜索关键字所在的行

sed -n '/nologin/'Ip passwd 注意是大写字母I,不是管道符号|

Linux  shell基础(五)sed命令

拓展用法:打印指定的行

命令写法:sed -n ‘行号或行号描述’p 文件路径 注意单引号''内不需要跟两个//
1、显示文件第2行内容

sed -n '2'p passwd

Linux  shell基础(五)sed命令

2、显示文件第6行至10行内容

sed -n '6,10'p passwd 注意中间是逗号,不是-

Linux  shell基础(五)sed命令

3、全文显示

sed -n '1,$'p passwd 注意不能写成“sed -n '^,$'p passwd”

Linux  shell基础(五)sed命令

拓展用法: 多条件过滤

命令可以用-e参数匹配多个条件,注意多个条件是或者关系,只要符合其中的一条就会被找到,如果匹配两条规则,那么改行会显示两次

显示第一行和含有root关键字的行

sed -e '/root/'p -e '1'p -n passwd

Linux  shell基础(五)sed命令

三、sed删除特定行用法

对特定大文件,使用sed命令删除部分内容,要比vim去打开相应的文件再删除要实用的多。没有加-i选项的删除只是显示上的删除,不会影响文件本身的内容,但加了-i选项后会作用于原始文件,所以删除前一定要做好备份。

命令写法:sed '/(关键字)/'d 文件路径
1、删除文件的第一行

sed '1'd 1.txt
Linux  shell基础(五)sed命令
注意第一行已经被删掉了

2、删掉含关键字“bus”的行

sed '/bus/'d 1.txt

Linux  shell基础(五)sed命令

3、删掉特定时间段之前的文件的思路
首先用grep -n >命令通过时间关键字过滤出行数。
然后使用sed '1,找到的最后行行号‘d 方式删除数据

四、sed替换特定内容用法

命令写法:
sed '1,$s///g' 文件路径

1、替换文件前10行中的ro+为R

sed -r '1,10/ro+/R/g' 1.txt

Linux  shell基础(五)sed命令

2、替换文件中的数字为空,其实就是删掉文件中所有的数字

sed 's/[0-9]//g' 1.txt

Linux  shell基础(五)sed命令
这个命令经常被用来判断输入的内容是否是数字

3、替换文件中的字母为空,其实就是删掉文件中所有的英文字母

sed 's/[a-zA-Z]//g' 文件名 (复习tr 命令 tr [a-z] [A-Z])

Linux  shell基础(五)sed命令

4、在所有行前面加上字符串123
小括号为扩展正则符号,使用时要加-r选项。

sed -r 's/(.*)/123&/g' test.txt

Linux  shell基础(五)sed命令

五、sed调换字符串次序用法

替换文字的顺序的关键是要用合适的正则
小括号内容在下文中可以

命令写法:

sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1:/' test.txt |head -n5

Linux  shell基础(五)sed命令

该操作的难点在于分段的正则的写法。


 本文转自 whytl 51CTO博客,原文链接:http://blog.51cto.com/11934539/2061781


相关文章
|
2月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
392 9
|
2月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
265 2
|
2月前
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
4月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
476 1
|
6月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
184 4
|
6月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
369 3
|
7月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
595 25
|
7月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
149 18
|
7月前
|
存储 Unix Shell
Shell 输出命令完全指南:echo 与 printf 的深度剖析
本文深入解析了 Shell 编程中 `echo` 和 `printf` 两个核心输出命令的用法与区别。`echo` 简单易用,适合基础输出;`printf` 功能强大,支持复杂格式化。文章从语法、转义序列、高级技巧到实际应用场景(如日志记录、进度显示)逐一讲解,并对比两者的性能与适用场景,帮助开发者根据需求灵活选择。最后通过进阶技巧和常见问题解答,进一步提升对两者的掌握程度。
369 1
|
8月前
|
网络协议 Shell 网络安全
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
“说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?