文档目录
一、sed-简介
1、shell对文件操作介绍
2、sed命令简介
3、sed语法: sed [options] '{command}{flags}' [filename]
二、sed-命令选项( -e ; -f ; -n ; -i ; -i.bak ; -r ; ! )
1、-e:将脚本中指定的一个或多个命令添加到处理输入时执行
2、-f:将文本中指定的命令添加到处理输入时执行的命令中
3、-n:抑制自动输出
4、-i:编辑文件内容
5、-i.bak:修改同时创建.bak备份源文件
三、sed-内部命令( a ; i ; p ; d ; s ; c ; y )
1、a :在匹配后面添加
2、i :在匹配前面添加
3、p :打印
4、d :删除
5、s :查找替换
6、c :更改
7、y :转换
四、sed-flags( 0-9 ; g ; p ; w filename)
1、数字:表示新文本替换的模式
2、g :表示用新文本替换现在文本的全部实例
3、p :表示打印原始的内容
4、w filename :将替换的结果写入文件
五、sed-小技巧
1、$统计文本有多少行
2、-r正则统计
3、^每行开头插入内容
4、$每行结尾追加内容
5、删除空行:/^$/d
6、删除空格:s/ *//g
7、查看/删除-注释行或空行

- - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - -  分隔符 - - - - - - - - - -  - - - - - - - - - -  - - - - - - - - - -  - - - -

一、sed-简介

1、shell对文件操作介绍

shell脚本编写中,会用到对文件的相关操作,如:增加内容,修改内容,删除部分内容,查看部分内容等,但是上述举例的这些操作一般都是需要文本编辑器中才能操作,常用的文本编辑器如:gedit、vim、nano等交互式文本编辑器,脚本无法自己独立完成,必须有人参与才可以完成,如果这样的话违背了我们编写脚本的初衷(全部由机器完成,减少人的工作压力,提升工作效率),如何才能让这些操作全部脚本自己搞定,而不需要人的参与。

为了解决上述问题,liunx为大家提供了一些命令,比如Perl、sed等命令,今天我就着重为大家介绍一下sed命令

2、sed命令简介

sed是liunx中提供的一个外部命令,它是一个行编辑器,非交互式的对文件内容进行增删改查的操作,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上查看输出。它和文本编辑器是有本质的区别:

文本编辑器:编辑对象是文件,一次处理一个文本

行编辑器:编辑的对象是文件中的行,一次处理文本中一行

3、sed语法: sed [options] '{command}{flags}' [filename]

二、sed-命令选项( -e ; -f ; -n ; -i ; -i.bak ; -r ; ! )

[root@localhost test20210807]# cat data1  #初始化数据
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.

1、-e :将脚本中指定的一个或多个命令添加到处理输入时执行

[root@localhost test20210808]# sed -e '3s/dog/cat/;s/brown/green/' data1  #同时替换2个内容:dog->cat;brown->green
1 the quick green fox jumps over the lazy dog.
2 the quick green fox jumps over the lazy dog.
3 the quick green fox jumps over the lazy cat.
4 the quick green fox jumps over the lazy dog.
5 the quick green fox jumps over the lazy dog.

2、-f :将文本中指定的命令添加到处理输入时执行的命令中

[root@localhost test20210808]# cat script20210808  #命令在脚本内一个命令写一行
3s/dog/cat/
s/brown/green/
[root@localhost test20210808]# sed -f script20210808 data1 #传递文本中命令执行
1 the quick green fox jumps over the lazy dog.
2 the quick green fox jumps over the lazy dog.
3 the quick green fox jumps over the lazy cat.
4 the quick green fox jumps over the lazy dog.
5 the quick green fox jumps over the lazy dog.

3、-n:抑制自动输出

[root@localhost test20210808]# sed -n '3s/dog/cat/p' data1   #将第3行第一个dog替换为cat,只打印次行,抑制自动打印
3 the quick brown fox jumps over the lazy cat.

4、-i:编辑文件内容

[root@localhost test20210808]# sed -i '3s/dog/cat/' data1  #修改源文件,不输出
[root@localhost test20210808]# cat data1
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy cat.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.

5、-i.bak:修改同时创建.bak备份源文件

[root@localhost test20210808]# sed -i.bak '3s/dog/cat/' data1  #修改第3行cat->dog,并保存源文件为.bak
[root@localhost test20210808]# cat data1
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy cat.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.
[root@localhost test20210808]# cat data1.bak
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.

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

7、!:取反(跟在模式条件后与shell有所区别)(暂无例子

三、sed-内部命令( a ; i ; p ; d ; s ; c ; y )

[root@localhost test20210807]# cat data1  #初始化数据
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.

1、a :在匹配后面添加

[root@localhost test20210807]# sed 'ahello world' data1  #在每行后追加helloworld
1 the quick brown fox jumps over the lazy dog.
hello world
2 the quick brown fox jumps over the lazy dog.
hello world
3 the quick brown fox jumps over the lazy dog.
hello world
4 the quick brown fox jumps over the lazy dog.
hello world
5 the quick brown fox jumps over the lazy dog.
hello world

2、i  :在匹配前面添加

[root@localhost test20210808]# sed 'ihello world' data1  #在每行前面插入helloworld
hello world
1 the quick brown fox jumps over the lazy dog.
hello world
2 the quick brown fox jumps over the lazy dog.
hello world
3 the quick brown fox jumps over the lazy dog.
hello world
4 the quick brown fox jumps over the lazy dog.
hello world
5 the quick brown fox jumps over the lazy dog.
[root@localhost test20210808]# sed '/3 the/i\hello world' data1 #匹配模式在第3行前插入
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
hello world
3 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.

3、p :打印

[root@localhost test20210808]# sed 'p' data1  #打印文件内容,再输出一遍
1 the quick brown fox jumps over the lazy dog.
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.
[root@localhost test20210808]# sed '3p' data1 #打印第3行,再输出原始文件一遍
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.

4、d :删除

[root@localhost test20210808]# sed 'd' data1  #全部删除
[root@localhost test20210808]# sed '2d' data1 #删除第二行
1 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.
[root@localhost test20210808]# sed '2-5d' data1 #删除第2-5行
sed: -e expression #1, char 2: unknown command: `-'
[root@localhost test20210808]# sed 'd' data1 #全部删除
[root@localhost test20210808]# sed '2d' data1 #删除第2行
1 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.
[root@localhost test20210808]# sed '2,5d' data1 #删除第2-5行
1 the quick brown fox jumps over the lazy dog.
[root@localhost test20210808]# sed '/3 the/d' data1 #匹配模式删除第3行
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.

5、s :查找替换

[root@localhost test20210808]# sed 's/dog/cat/' data1  #替换dog为cat
1 the quick brown fox jumps over the lazy cat.
2 the quick brown fox jumps over the lazy cat.
3 the quick brown fox jumps over the lazy cat.
4 the quick brown fox jumps over the lazy cat.
5 the quick brown fox jumps over the lazy cat.
[root@localhost test20210808]# sed '3s/dog/cat/' data1 #替换第3行dog为cat
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy cat.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.
[root@localhost test20210808]# sed '2,4s/dog/cat/' data1 #替换第2-4行dog为cat
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy cat.
3 the quick brown fox jumps over the lazy cat.
4 the quick brown fox jumps over the lazy cat.
5 the quick brown fox jumps over the lazy dog.
[root@localhost test20210808]# sed '/3 the/s/dog/cat/' data1 #匹配模式替换第3行dog为cat
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy cat.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.

6、c :更改

[root@localhost test20210808]# sed 'c\hello world' data1  #每行更改
hello world
hello world
hello world
hello world
hello world
[root@localhost test20210808]# sed '3c\hello world' data1 #修改第3行
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
hello world
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.
[root@localhost test20210808]# sed '2,4c\hello world' data1 #删除2-4行,并在第2行位置插入
1 the quick brown fox jumps over the lazy dog.
hello world
5 the quick brown fox jumps over the lazy dog.
[root@localhost test20210808]# sed '/3 the/c\hello world' data1 #匹配模式更改第3行
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
hello world
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.

7、y :转换

[root@localhost test20210808]# sed 'y/abcdefg/ABCDEFG/' data1  #转换指定值
1 thE quiCk Brown Fox jumps ovEr thE lAzy DoG.
2 thE quiCk Brown Fox jumps ovEr thE lAzy DoG.
3 thE quiCk Brown Fox jumps ovEr thE lAzy DoG.
4 thE quiCk Brown Fox jumps ovEr thE lAzy DoG.
5 thE quiCk Brown Fox jumps ovEr thE lAzy DoG.
[root@localhost test20210808]# sed 'y/abcdefg/1234567/' data1 #转换指定值
1 th5 qui3k 2rown 6ox jumps ov5r th5 l1zy 4o7.
2 th5 qui3k 2rown 6ox jumps ov5r th5 l1zy 4o7.
3 th5 qui3k 2rown 6ox jumps ov5r th5 l1zy 4o7.
4 th5 qui3k 2rown 6ox jumps ov5r th5 l1zy 4o7.
5 th5 qui3k 2rown 6ox jumps ov5r th5 l1zy 4o7.

四、sed-flags:( 0-9 ; g ; p ; w filename )

[root@localhost test20210808]# cat data3  #数据准备-flags测试
1 the quick brown fox jumps over the lazy dog.dog.
2 the quick brown fox jumps over the lazy dog.dog.
3 the quick brown fox jumps over the lazy dog.dog.
4 the quick brown fox jumps over the lazy dog.dog.
5 the quick brown fox jumps over the lazy dog.dog.

1、数字 :表示新文本替换的模式

[root@localhost test20210808]# sed 's/dog/cat/2' data3   #将第2个dog替换为cat
1 the quick brown fox jumps over the lazy dog.cat.
2 the quick brown fox jumps over the lazy dog.cat.
3 the quick brown fox jumps over the lazy dog.cat.
4 the quick brown fox jumps over the lazy dog.cat.
5 the quick brown fox jumps over the lazy dog.cat.

2、g :表示用新文本替换现在文本的全部实例

[root@localhost test20210808]# sed 's/dog/cat/g' data3   #将所有的dog替换为cat
1 the quick brown fox jumps over the lazy cat.cat.
2 the quick brown fox jumps over the lazy cat.cat.
3 the quick brown fox jumps over the lazy cat.cat.
4 the quick brown fox jumps over the lazy cat.cat.
5 the quick brown fox jumps over the lazy cat.cat.

3、p  :表示打印原始的内容

[root@localhost test20210808]# sed '3s/dog/cat/p' data3   #将第3行第一个dog替换为cat,且打印出
1 the quick brown fox jumps over the lazy dog.dog.
2 the quick brown fox jumps over the lazy dog.dog.
3 the quick brown fox jumps over the lazy cat.dog.
3 the quick brown fox jumps over the lazy cat.dog.
4 the quick brown fox jumps over the lazy dog.dog.
5 the quick brown fox jumps over the lazy dog.dog.

4、w filename :将替换的结果写入文件

[root@localhost test20210808]# sed '3s/dog/cat/w savedata3' data3   #将第3行第一个dog替换为cat,且w保存到对应文件内
1 the quick brown fox jumps over the lazy dog.dog.
2 the quick brown fox jumps over the lazy dog.dog.
3 the quick brown fox jumps over the lazy cat.dog.
4 the quick brown fox jumps over the lazy dog.dog.
5 the quick brown fox jumps over the lazy dog.dog.
[root@localhost test20210808]# cat savedata3
3 the quick brown fox jumps over the lazy cat.dog.

五、sed-小技巧

[root@localhost test20210808]# cat data1  #测试数据
1 the quick brown fox jumps over the lazy dog.
2 the quick brown fox jumps over the lazy dog.
3 the quick brown fox jumps over the lazy dog.
4 the quick brown fox jumps over the lazy dog.
5 the quick brown fox jumps over the lazy dog.

 1、$统计文本有多少行

[root@localhost test20210808]# sed -n '$=' data1  #统计文本有多少行,等价于wc -l < data1
5

2、-r正则统计

[root@localhost test20210808]# sed -nr '/^(root)(.*)(bash)$/p' /etc/passwd  #统计以root开头中间是任意,bash结尾的账户信息
root:x:0:0:root:/root:/bin/bash

3、^每行开头插入内容

[root@localhost test20210808]# sed s/^/hi../ data1  #每行开头插入hi..
hi..1 the quick brown fox jumps over the lazy dog.
hi..2 the quick brown fox jumps over the lazy dog.
hi..3 the quick brown fox jumps over the lazy dog.
hi..4 the quick brown fox jumps over the lazy dog.
hi..5 the quick brown fox jumps over the lazy dog.

4、$每行结尾追加内容

[root@localhost test20210808]# sed s#\$#verygood# data1  #每行结尾追加verygood
1 the quick brown fox jumps over the lazy dog.verygood
2 the quick brown fox jumps over the lazy dog.verygood
3 the quick brown fox jumps over the lazy dog.verygood
4 the quick brown fox jumps over the lazy dog.verygood
5 the quick brown fox jumps over the lazy dog.verygood

5、删除空行:/^$/d

[root@localhost test20210808]# cat data4  #测试数据
test line1 test line3 ok hello test very good test line5
[root@localhost test20210808]# sed /^$/d data4 #删除空行
test line1
test line3 ok hello test very good
test line5

6、删除空格:s/ *//g

[root@localhost test20210808]# cat data4  #测试数据
test line1
test line3 ok hello test very good
test line5
[root@localhost test20210808]# sed "s/ *//g" data4 #删除空格
testline1
testline3okhellotestverygood
testline5

 7、查看/删除-注释行或空行

[root@localhost test20210808]# cat data2 #测试空行和#号的删除
# line1 注释
# line2 注释 line4 正文
[root@localhost test20210808]# sed -ne '/^#/p;/^$/p' data2 #-e查看#号或空格开头
# line1 注释
# line2 注释 [root@localhost test20210808]# sed -nr '/(^#|#|^$)/p' data2 #正则查看#号或空格开头
# line1 注释
# line2 注释 [root@localhost test20210808]# sed -r '/(^#|#|^$)/d' data2 #正则删除#号或空格开头
line4 正文

shell脚本(15)-sed命令的更多相关文章

  1. linux下shell脚本中sed命令的用法

    先来给一个案例: #将old.sql文件中的符号“|”替换为“,”,并保存到test.sql文件中 sed "s/|/,/g" "old.sql"> te ...

  2. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  3. shell脚本批量执行命令----必需判断上一步执行结果--没有捷径

    # 注意:shell脚本批量执行命令,不能只写一个函数,然后把所有命令复制进去,之前试过这样是不行的.必须要有一个判断命令执行成功与否的语句 # 简单的命令可以不加结果判断符号,但是遇到解压包.sed ...

  4. shell脚本一条命令直接发送http请求(xjl456852原创)

    我们知道nc命令是一个网络工具.可以连接tcp/udp.也能模拟发送http请求. 现在介绍通过shell脚本,一条命令直接发送http请求. 命令如下,可以对下面的地址等信息自行修改: #!/bin ...

  5. shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出

    shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出 如: #/bin/sh local ret='sqlite3 test.db "select test ...

  6. 在shell中使用sed命令替换/为\/

    sed命令相关: https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html https://www.cnblogs.com/D ...

  7. (转)shell脚本之seq命令

    shell脚本之seq命令 原文:http://blog.csdn.net/paoxiaohui/article/details/52830595 seq 用于生成从一个数到另一个数之间的所有整数. ...

  8. shell脚本之tr命令使用

    tr命令用来进行对标准输入的内容做替换.例如 # echo 'HELLO WORLD!!!' | tr "A-Z" "a-z" hello world!!! 这 ...

  9. Shell脚本之sed详解

    在编写shell脚本的过程中,我们经常需要使用sed流编辑器和awk对文本文件进行处理. 一.什么是sed? sed 是一种在线编辑器,它一次处理一行内容.sed是非交互式的编辑器.它不会修改文件,除 ...

  10. shell读取配置文件-sed命令

    在编写启动脚本时,涉及到读取配置文件,特地记录下shell脚本读取启动文件的方式.主要提供两种格式的读取方式,方式一配置文件采用"[]"进行分区,方式二配置文件中需要有唯一的配置项 ...

随机推荐

  1. [USACO2007NOVG] Telephone Wire G

    题目描述 Farmer John's cows are getting restless about their poor telephone service; they want FJ to rep ...

  2. 【scikit-learn基础】--『预处理』之 标准化

    数据的预处理是数据分析,或者机器学习训练前的重要步骤.通过数据预处理,可以 提高数据质量,处理数据的缺失值.异常值和重复值等问题,增加数据的准确性和可靠性 整合不同数据,数据的来源和结构可能多种多样, ...

  3. CH395实现主动ping对端功能(代码及说明)

    目录 1.PING原理 1.1简介 1.2协议 1.3通信流程 2.代码解释 3.工程链接 PING原理 1.简介 PING是基于ICMP(Internet Control Message Proto ...

  4. 牛客小白月赛2 E题 是是非非 (尼姆博弈)

    题目链接:https://www.nowcoder.com/acm/contest/86/E 解题思路:由尼姆博弈我们可以知道,如果所有堆的石子数量异或为0,那么先手必败,否则先手必胜. 由异或我们可 ...

  5. rust 过程宏

    简介 Rust 编程语言里面有两种宏系统,一种是声明宏(Declarative Macros),另一种为过程宏(Procedural Macros).声明宏和过程宏是两种基本上完全不一样的宏系统,编写 ...

  6. Javascript Ajax总结——其他跨域技术之Comet

    Comet指一种更高级的Ajax技术( 也称 "服务器推送" ),一种服务器向页面推送数据的技术.Comet能够让信息近乎实时地被推送到页面上,非常适合体育比赛的分数和股票报价.有 ...

  7. 如何屏蔽各大AI公司爬虫User Agent

    罗列各大AI公司Scraper爬虫Crawler使用的User Agent,教您如何在robots.txt里面屏蔽这些爬虫的访问,禁止它们下载您的网站内容以训练 AI 模型,保护数据,降低带宽,防止宕 ...

  8. 【Python】【OpenCV】OCR识别(二)——透视变换

    对于OCR技术在处理有角度有偏差的图像时是比较困难的,而水平的图像使用OCR识别准确度会高很多,因为文本通常是水平排列的,而OCR算法一般会假设文本是水平的. 针对上述情况,所以我们在处理有角度的图象 ...

  9. 十分钟教你在 k8s 中部署一个前后端应用

    转载至我的博客https://www.infrastack.cn ,公众号:架构成长指南 大家好,我是蜗牛哥,好多开发人员,尤其是没接触过 k8s 的人员对如何在k8s中部署一个 前后端应用很模糊,不 ...

  10. 解读 SSDB、LevelDB 和 RocksDB 到 GaussDB(for Redis) 的迁移

    摘要:本期将详细介绍 SSDB.LevelDB 和 RocksDB 到 GaussDB(for Redis)的迁移. 本文分享自华为云社区<华为云PB级数据库GaussDB(for Redis) ...