SHELL编程四剑客之Sed工具

Stella981
• 阅读 686

SED是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以来自键盘输入、文本重定向、字符串、变量,甚至来自于管道的文本。

Sed工具在处理文本时默认把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)。如果要将变化写入磁盘、文件需要使用-i参数。

sed命令语法参数格式:sed 参数 ‘sed内置命令字符‘ 输入文件;

一、sed 命令的参数选项及说明

参数选项

解释说明

-n

取消默认的sed的输出,常与sed内置命令的p连用

-i

直接修改文件内容,而不是输出到终端。如果不使用-i选项,则sed只是修改内存中的数据,并不会影响磁盘上的文件

-e

如果有多个sed内置命令,需要使用-e参数,使用情景如下

情景1:sed -e ‘sed内置命令’ -e ‘sed内置命令’ haha.txt
情景2:sed -e ‘sed内置命令;sed内置命令’ haha.txt sed内置命令用分号隔开
二、sed内置命令字符的功能说明

sed的内置命令字符

解释说明

a\

在当前行后添加一行或多行

c\

用新文本修改(替换)当前行中的文本

i\

在当前行前插入文本

d

删除行

p

打印行

匹配所匹配的内容以外的所有内容

s///g或者s###g

用一个字符串替换另外一个字符串

s///G或者s###G

在一个字符串后面追加另外一个字符串

N

将当前读入行的下一行读取到当前的模式空间。

y

将一个字符替换成另外一个字符

三、sed的正则表达式
同grep的正则表达式,大同小异,见下:
https://blog.csdn.net/weixin_44571270/article/details/104071841

例题:匹配ip地址的sed命令

echo 172.16.177.76|sed -n '/^\([0-9]\{1,3\}\.\)\{3\}\([0-9]\{1,3\}\)$/p'

四、实战演练
(1)替换jfedu.txt文本中old为new:
sed ‘s/old/new/g’ jfedu.txt
(2)打印jfedu.txt文本第一行至第三行:
sed -n ‘1,3p’ jfedu.txt
(3)打印jfedu.txt文本中第一行与最后一行:
sed -n ‘1p;$p’ jfedu.txt
(4)删除jfedu.txt第一行至第三行、删除匹配行至最后一行:
sed ‘1,3d’ jfedu.txt
sed ‘/jfedu/,$d’ jfedu.txt
(5)删除jfedu.txt最后6行及删除最后一行:
for i in seq 1 6;do sed -i ‘$d’ jfedu.txt ;done
sed ‘$d’ jfedu.txt
(6)删除jfedu.txt最后1行:
sed ‘$d’ jfedu.txt
(7)在jfedu.txt查找jfedu所在行,并在其下一行添加word字符,a表示在其下一行添加字符串:
sed ‘/jfedu/aword’ jfedu.txt
(8)在jfedu.txt查找jfedu所在行,并在其上一行添加word字符,i表示在其上一行添加字符串:
sed ‘/jfedu/iword’ jfedu.txt
(9)在jfedu.txt查找以test结尾的行尾添加字符串word,$表示结尾标识,&在Sed中表示添加:
sed ‘s/test$/&word/g’ jfedu.txt
(10)在jfedu.txt查找www的行,在其行首添加字符串word,^表示起始标识,&在Sed中表示添加:
sed ‘/www/s/^/&word/’ jfedu.txt
(11)多个sed命令组合,使用-e参数:
sed -e ‘/www.jd.com/s/^/&1./’ -e ‘s/www.jd.com$/&./g’ jfedu.txt
(12)多个sed命令组合,使用分号“;”分割:
sed -e ‘/www.jd.com/s/^/&1./;s/www.jd.com$/&./g’ jfedu.txt
(13)Sed读取系统变量,变量替换:
WEBSITE=WWW.JFEDU.NET
Sed “s/www.jd.com/$WEBSITE/g” jfedu.txt
(14)修改Selinux策略enforcing为disabled,查找/SELINUX/行,然后将其行enforcing值改成disabled、!s表示不包括SELINUX行:
sed -i ‘/SELINUX/s/enforcing/disabled/g’ /etc/selinux/config
sed -i ‘/SELINUX/!s/enforcing/disabled/g’ /etc/selinux/config
(15)合并上下两行,也即两行合并:
sed ‘N;s/\n/ /’ jfedu.txt

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Linux Shell编程 sed命令
概述sed是一种几乎可以应用在所有UNIX平台(包括 Linux)上的轻量级流编辑器,体积小。所以,它可以对从如管道这样的标准输入中接收的数据进行编辑。 sed主要是用来将数据进行选取、替换、删除、新増的命令。我们看看命令的语法:root@localhost~sed选项'动作'文件名选项:
Stella981 Stella981
2年前
Linux Shell 文本处理工具集锦
本文将介绍Linux下使用Shell处理文本时最常用的工具:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;提供的例子和参数都是最常用和最为实用的;我对shell脚本使用的原则是命令单行书写,尽量不要超过2行;如果有更为复杂的任务需求,还是考虑python吧;find文件查找
Stella981 Stella981
2年前
Linux sed命令
简介sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
sed
1.Sed简介sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
胖大海 胖大海
1年前
sed介绍
1、sed介绍   sed全名为streameditor,流编辑器,用程序的方式来编辑文本,功能相当的强大。是贝尔实验室的LeeE.McMahon在1973年到1974年之间开发完成,目前可以在大多数操作系统中使用,sed的
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这