SHELL编程四剑客之Sed工具

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

点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Linux Shell编程 sed命令

概述sed是一种几乎可以应用在所有UNIX平台(包括 Linux)上的轻量级流编辑器,体积小。所以,它可以对从如管道这样的标准输入中接收的数据进行编辑。 sed主要是用来将数据进行选取、替换、删除、新増的命令。我们看看命令的语法:root@localhost~sed选项'动作'文件名选项:

Linux Shell 文本处理工具集锦

本文将介绍Linux下使用Shell处理文本时最常用的工具:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;提供的例子和参数都是最常用和最为实用的;我对shell脚本使用的原则是命令单行书写,尽量不要超过2行;如果有更为复杂的任务需求,还是考虑python吧;find文件查找

SHELL编程四剑客之Sed工具 - HelloWorld