1.基本概述

sed是一个流编辑器, 非交互式的编辑器,它一次处理一行内容. 处理时,把当前处理的行存储在临时缓冲区中,称*

为“模式空间”(pattern space) 接着用 sed 命令处理缓冲区中的内容,处理完成后, 把缓冲区的内容送往屏幕。 接

着处理下一行,这样不断重复,直到文件末尾。 文件内容并没有改变,除非你 使用重定向存储输出。 Sed 要用来自

动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

2..sed基础语法

第一种形式:stdout | sed [option] "pattern command"

第二种形式: sed [option] "pattern command" file

3..sed常用选项 -i -r

	sed相关示例文件
[root@web01 opt]# cat file.txt
I love shell
I love SHELL
This is test file

1.sed-n、-e选项示例

#取消默认输出
[root@web01 opt]# sed -n '/shell/p' file.txt
I love shell

#编辑多项

[root@web01 opt]# sed -n -e '/shell/p' -e '/SHELL/p' file.txt
I love shell
I love SHELL

2.sed -f 选项示例

#将pattern写入文件中
[root@web01 opt]# cat edit.sed
/shell/p
[root@web01 opt]# sed -n -f edit.sed file.txt

3.sed -r 选项示例

[root@web01 opt]# sed -n '/shell|SHELL/p' file.txt
#扩展正则表达式
[root@web01 opt]# sed -rn '/shell|SHELL/p' file.txt
I love shell
I love SHELL

4.sed -i 选项

[root@manager sed]# sed  -in '/shell/d'  file.txt

3.sed pattern

	sed -n '10p' passwd
sed -n '10,20p' passwd
sed -n '1,+5p' passwd
sed -n '/^root/p' passwd
sed -n '/^root/,/^ftp/p' passwd
sed -n '/^\[mysql.*/,/^\[mysqld_safe\]/p' /etc/my.cnf|grep -v "^\[.*"
sed -n '2,/\/bin\/sync/p' passwd

1) 打印/etc/passwd中第20行

sed -n '20p' /etc/passwd

2)打印/etc/passwd中从第8行开始,到第15行结束的内容

	sed -n '8,15p' /etc/passwd

3)打印/etc/passwd中从第8行开始,然后+5行结束的内容

	sed -n '8,+5p' /etc/passwd

4)打印/etc/passwd中开头匹配bin字符串的内容

	sed -n '/^bin/p' /etc/passwd

5)打印/etc/passwd中开头为root的行开始,到开头为ftp的行结束的内容

	sed -n '/^root/,/^ftp/p' /etc/passwd

6)打印/etc/passwd中第8行开始,到含有/sbin/nologin的内容的行结束内容

	sed -n '8,/\/sbin\/nologin/p' /etc/passwd

4.sed追加命令

[root@manager sed]# sed -i '/^root/i server {\n\tlisten 80;\n\tserver_name oldxu.com;\n\tindex index.html;\n\troot /code;\n}' passwd
server {
listen 80;
server_name oldxu.com;
index index.html;
root /code;
}

本章练习示例:

1) passwd文件第10行后面追加“Add Line”

	sed -i '10a "Add Line"' passwd

2)passwd文件第10行到第20行,没一行后面都追加 "Test Line"

sed -i '10,20a "Test Line"' passwd

3)passwd文件匹配到/bin/bash的行后面追加 "Insert Line"

	sed -i '/\/bin\/bash/a "Insert Line"' passwd

4)passwd文件匹配到以bin开头的行,在匹配的行前追加 "Add Line Before"

	sed -i '/^bin/i "Add Line Before"' passwd

5)passwd文件每一行前面都追加 "Insert Line Before"

	sed -i 'i "Insert Line Before"' passwd

6)将/etc/fstab文件的内容追加到passwd文件的第10行后面

	sed -i '10r /etc/fstab' passwd

7)将/etc/inittab文件内容追加到passwd文件匹配/bin/sync行的后面

	sed -i '/\/bin\/sync/r /etc/inittab' passwd

8)将/etc/hosts文件内容追加到passwd文件中10行的后面

	sed -i '10r /etc/hosts' passwd

9)将passwd文件匹配到/bin/bash的行追加到/tmp/sed.txt文件中

	sed -i '/\/bin\/bash/w /tmp/sed.txt' passwd

10)将passwd文件丛第10行开始,到匹配到nfsnobody开头的所有行内容追加到/tmp/sed-1.txt

	sed -i '10,/^nfsnobody/w /tmp/sed-1.txt' passwd

5.sed删除命令

本章练习示例:

1)删除passwd中的第15行

sed -i '15d' passwd

2)删除passwd中的第8行到第14行的所有内容

sed -i '8,14d' passwd

3)删除passwd中以/sbin/nologin结尾的行

	sed -i '/\/sbin\/nologin$/d' passwd

4)删除passwd中以bin开头的行,到以ntp开头的行的所有内容

	sed -i '/^bin/,/^ntp/d' passwd

5)删除passwd中第3行到以ftp开头的所有行内容

	sed '3,/^ftp/d' passwd

6)典型需求:删除Nginx配置文件中所有的注释以及空行

	sed -ri '/^#|^$| #/d' nginx.conf

6.sed修改命令 s///g <--替换 c 修改

sed '/^SELINUX=/c SELINUX=disabled'

1.修改passwd文件第1行中第一个root为ROOT

	sed -i  '1s/root/ROOT/' passwd

2.修改passwd文件中第5行到第10行中所有的/sbin/nologin为/bin/bash

	sed -i '5,10s/\/sbin\/nologin/\/bin\/bash/' passwd
​ sed -i '5,10s#/sbin/nologin#/bin/bash#' passwd

3.修改passwd文件中匹配到/sbin/nologin的行,将匹配到行中的login

为该大写的LOGIN

	sed -i '/\/sbin\/nologin/s#login#LOGIN#g' passwd
sed -i '/\/sbin\/nologin/s/login/LOGIN#g' passwd

4.修改passwd文件中从匹配到以root开头的行,到匹配到以bin开头行,修改bin为BIN

sed -i '/^root/,/^bin/s/bin/BIN/g' passwd

5.修改SELINUX=enforcing修改为SELINUX=disabled。(可以使用c替换方式)

sed -i '/^SELINUX=/c SELINUX=disabled' selinux

6.将nginx.conf配置文件添加注释。 ^ $

sed -i 's/^/# /' nginx.conf

7.使用sed提取eth0网卡的IP地址

	ifconfig eth0 | sed -rn '2s/^.*et //p' | sed -rn 's/ ne.*//p'
ifconfig eth0 |sed -nr '2s/(^.*et) (.*) (net.*)/\2/p'

7.sed脚本练习

需求描述:处理一个类似MySQL配置文件的my.cnf文件。

1.输文件中有几个段,一对 [ ] 为一段。

2.针对每个段配置文件参数,统计总个数。

[root@web01 opt]# sh example.sh
1: client 2
2: server 12
3: mysqld 12
4: mysqld_safe 7
5: embedded 8
6: mysqld-5.5 10

1.打印每段的内容

	sed -n -e '/^\[.*\]/p' sed.txt | sed 's/\[//' | sed 's/\]//'

2.统计每段参数的总参个数

	sed -n '/^\[server\]/,/^\[.*\]/p' sed.txt | sed -r '/^\[|^#|^$/d'|wc -l

脚本为

[root@web01 sed]# cat sed.sh
#!/bin/bash
#Author: rzq
#QQ: 0123456789
#Date: 2019-11-06
#FileName: sed.sh
#URL: https://www.jianshu.com
#Description: The test script
#Copyright (C): 2019 All rights reserved HS () { num=$(sed -n '/^\[.*]/p' kl.txt|sed 's/\[//'|sed 's/\]//') } GS () { gs=$(sed -n '/^\['$i']/,/^\[.*]/p' kl.txt|sed -r '/^\[|^#|^$/d'|wc -l) } HS
b=0
for i in $num
do
let b++
GS
echo "$b $i $gs"
done

需求描述: 处理一个ansible的invtory主机清单。

1.输出主机组,一对 [ ] 为一个主机组。

2.输出每个主机组下的主机总个数。

[root@web01 opt]# sh example.sh
1: web01: 有 2 台主机
2: web02: 有 12 台主机
[root@web01 sed]# cat ansible.sh
#!/bin/bash
#Author: rzq
#QQ: 0123456789
#Date: 2019-11-07
#FileName: ansible.sh
#URL: https://www.jianshu.com
#Description: The test script
#Copyright (C): 2019 All rights reserved fu () {
FW=$(sed -n '/^\[.*]/p' lp.txt|sed 's/\[//' | sed 's/\]//')
} ip () {
IP=$(sed -n '/^\['$i'/,/^\[.*]/p' lp.txt|sed -r '/^\[|^$/d'|wc -l)
} fu
num=0
for i in $FW
do
let num++
ip
echo "$num $i $IP"
done

sed
两种语法:
sed options '/pattern1/command' file 1、选项options:
-i 直接变更文件
-r 支持扩展正则表达式
-f 将处理命令写入文件中,然后进行调用
-e 可以多项编辑操作
-n 取消默认文本的输出 2.模式匹配
字符串匹配
正则表达式匹配
从哪里-> 到哪里 '/pattern1/,/pattern2/' 3.命令command

a #在匹配的行后添加
i #在匹配的行前添加
r #读取某个文件的内容,添加至/pattern1/行的后面
w #将文件的内容写入到某个文件中。 >

d #对匹配的内容进行删除,但需要配合-i选项才能操作文件。

s/// #替换,将什么替换成什么,需要配合-i选项才能操作文件
s///g #替换,全局替换(替换一个行中所有满足条件的内容)
c #修改,可以使用正则表达式匹配,然后修改 需要配合-i选项才能操作文件

p #打印输出的效果。默认的动作,必须要添加。通常配合-n一起使用

sed文本处理的更多相关文章

  1. sed文本处理知识点整理

    参考资料:http://man.linuxde.net/sed    <鸟哥的私房菜> sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用.sed 后面接的操作 ...

  2. linux sed文本

    sed介绍 sed(stream editor)是一种非交互式的流编辑器,通过多种转换修改流经它的文本.默认情况下,sed不会改变原文件本身,而只是对流经sed命令的文本进行修改,并将修改后的结果打印 ...

  3. Linux - sed 文本操作

    SED 是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大. sed全称是:Stream EDitor 调用sed命令有两种 ...

  4. awk,grep,sed文本格式化处理

    一.awk取列 [root@web01 ~]# cat /etc/passwd|awk -F ':' '{print $1"\t\t"$7}' ###-F指定分隔符 root /b ...

  5. sed - 文本三剑客之编辑功能

    sed - stream editor for filtering and transforming text Sed是一个流编辑器.流编辑器用于对输入流(文件或管道输入)执行基本的文本转换.虽然在某 ...

  6. 全网最详细的Linux命令系列-sed文本处理命令

    Sed简介 SED是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以来自键盘输入.文本重定向.字符串.变量,甚至来自于管道的文本,与VIM编辑器类似,它一次处理一行内容,Sed可 ...

  7. 十二、sed文本处理

    一.概述 1.sed 是一款流编辑工具,用来对文本进行过滤与替换工作,特别是当你想要对几十个配置文件做统计修改时,你会感受到 sed 的魅力!sed 通过输入读取文件内容,但一次仅读取一行内容进行某些 ...

  8. sed文本处理--文本行扩展与分割

    原文件: 00 abc sdfdsf1 2 45 3 400 xfd xdfssdf3 322 345 234 处理后文件: 00 abc sdfdsf 1 2 400 abc sdfdsf 5 3 ...

  9. awk,sed文本处理案例

    #!/bin/bash ############################################################################# #针对一个多级目录下 ...

随机推荐

  1. 学习强国docker文件用法

    学习强国docker用法 docker文件地址   https://github.com/fuck-xuexiqiangguo/docker 构建  docker  docker build -t D ...

  2. mapreduce shortest way out

    相关知识 最优路径算法是无向图中满足通路上所有顶点(除起点.终点外)各异,所有边也各异的通路.应用在公路运输中,可以提供起点和终点之间的最短路径,节省运输成本.可以大大提高交通运输效率. 本实验采用D ...

  3. css知识笔记:垂直居中(别只看,请实操!!!)

    css实现元素的垂直居中. (尝试采用5W2H方法说明): 别只看,请实操!!! What: 1.这篇文档主要描述元素水平方向居中的几种最常见和最实用的几种方式,并说明优缺点. 2.写这篇文章的目的, ...

  4. The PostgreSQL installation in windows

    Summary: in this tutorial, we will show you how to install PostgreSQL on your local system for learn ...

  5. 23种设计模式之Builder设计模式

    概述 建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在 ...

  6. Python安装常见问题(1):zipimport.ZipImportError: can't decompress data(此问题不解决pip安装不成功)

    在CentOS以及其他的Linux系统中遇到安装包安装错误的原因,大多数都是因为缺少依赖包导致的,所以对于错误:zipimport.ZipImportError: can’t decompress d ...

  7. centos7.6使用openssl生成CA签署的证书个人实验笔记

    准备:客户端centos6.10  服务端Centos7.6 实验:客户端生成证书请求,服务端颁发证书,最后吊销其中一个证书 1.先在服务端上的/etc/pki/CA/目录生成rsa的私钥: 2.在服 ...

  8. vi 中按了 Ctrl+S 后死机不能动怎么办?

    我们下意识想保存文档时,会不知觉地按下 Ctrl+S 组合键.但如果是正在 Linux 的 Shell 中使用 vi 编辑文本,这么按就糟了,会直接出现卡住.不能动.卡死的现象. 不过,后来我搞明白了 ...

  9. JUC-4-CopyOnWriteArrayList

    什么是CopyOnWrite容器 CopyOnWrite容器即写时复制的容器.通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新 ...

  10. Vue STOP&SELF方法使用

    stop属性:停止冒泡只执行到此处 self:只执行当前 代码: <!doctype html> <html lang="en"> <head> ...