侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Linux命令之sed命令使用介绍

linux  /  管理员 发布于 7年前   228

sed是linux轻量级流编辑器,用于行的操作,主要用来数据的选取、替换、删除、新增等。从输入文件中一次一行的读取,

按顺序将列表中的命令应用到每一行,并将其编辑过的行,写到标准输出。

权  限:所有用户

位  置:/bin/sed

用  法:sed [-nefr]  [动作]  file

参数:

-n

         不加-n的时候,sed处理的数据和不处理的都会输出,加上-n只会输出sed操作的行,

         注意:与动作p和起来用,不要与其他动作一起用

-e

         直接在命令行模式上进行sed的动作编辑

         例如:sed -e 's/aaa/b/g; s/aa/b/g' file 也即多个动作同时操作,注意中间的分号

-f          

         直接将sed动作写在一个文件内,-f file 则可以执行filename内的sed动作

-r

         sed的动作支持扩展的正则表达式(默认支持基础正则表达式)

-i

         直接修改读取的文件内容

注意:多个选项参数一起用的时候,例如:sed  -i  -r  ...             不可以这样:sed -ir  ...

动作说明:[n1[,n2]] function

         不见得会存在,一般代表选择动作的行数,如果动作是在5到15行之间进行替换,则"10,20c"

a      新增,当前行的下一行

         sed '2a hello world' file  输出在第2行之后插入hello world


         sed '2a hello world\      

         my name is csdn'  file      

        输出在2行下面插入两行分别为hello world  和my name is scdn

         特别注意hello world 后面的"\"

c       替换,是整行替换

         sed '3,6c  hello csdn'  file  

         输出把3至6行的只替换为 hello csdn(第3至6行只剩下一行hello csdn,不是3至6行的每一行都为hello csdn)

d       删除

          sed '3,6d' file  输出删除file的3至6行之后的内容

i        插入,当前行的上一行

          与a动作类似,参照a动作用法

p       打印

          sed  -n  '2,5p' file   打印file的第2至5行

s        替换

          sed 's/oldString/newString/g' file   oldString和newString支持基础正则表达式和扩展的正则表达式

          cat -n nginx | sed '1,99s/[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}//g'  把nginx日志的1至99行的第一个字段IP地址替换为空

          结果为:

    91 - - [15/Dec/2014:23:00:10 +0800],GET /identified?key=this-is-TMP-apikey&digest=914EBB2FD551844CBE15513C0126E6EE&digest-algorithm=ed2k&hash=9D37BB2988F26973371FAB028FEEEB93D5542300& HTTP/1.1,200 65,-,XMP Windows Client 4.9,-,ed2k://|file|ki141213.wmv|1119747351|914EBB2FD551844CBE15513C0126E6EE|h,00E04C377725NG4E,ki141213.wmv,1119747351    92 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,-    93 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,-    94 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,-    95 - - [15/Dec/2014:23:00:10 +0800],-,400 0,-,-,-,-,-,-,-    96 - - [15/Dec/2014:23:00:10 +0800],GET /identified?key=this-is-TMP-apikey&digest=76BB7C854168DCD1BF15FCB92E4114FFD4CFE7DE&digest-algorithm=magnet&hash=28003498535& HTTP/1.1,200 65,-,Thunder Windows Client 7.9,-,magnet:?xt=urn:btih:76BB7C854168DCD1BF15FCB92E4114FFD4CFE7DE,EC55F9E92A5212LQ,ABP-209R,1067178826    97 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,-    98 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,-    99 - - [15/Dec/2014:23:00:10 +0800],-,400 0,-,-,-,-,-,-,-   100121.12.57.154 - - [15/Dec/2014:23:00:10 +0800],GET /identified? HTTP/1.1,401 112,-,-,-,-,-,-,-


动作其他用法1:sed  '/模式/动作'  文件

可以指定某种模式的行进行动作操作,如下(这里的文件名是a,注意cat a的输出):

1、以p开头的行前加[TAB]

$ cat apa:11:asa:32:capp:5:bstort:1:dpear:4:aahello:3:f$ sed '/^p/s/^/\t/' apa:11:asa:32:capp:5:bstort:1:dpear:4:aahello:3:f

2、删除以a开头的行,(那么下面的输出,以a开头的行就没了)

$ sed '/^a/d' apa:11:asa:32:cstort:1:dpear:4:aahello:3:f
3、反向匹配(文件a中,输出只保留了a开头的行)

$ sed '/^a/!d' aapp:5:b

4、等价与grep -v   (输出文件a中,非p字母开头的行)

$ grep  -v '^h' apa:11:asa:32:capp:5:bstort:1:dpear:4:aa$ sed -n '/^h/!p' apa:11:asa:32:capp:5:bstort:1:dpear:4:aa


动作其他用法2:

也可以使用成对的正则表达式或行号与正则表达式的结合,来选取一定范围的行,如下:

1、sed '1,3d'  file   删除1至3行

2、sed -n '1,3p' file  打印1至3行

3、sed  '1, /^$/d' file  删除范围:第一行至第一个空行 (注意格式)

4、sed '/^$/, /^app/d' file  删除范围:第一个空行至以app开头的行

5、sed '$d'  file   删除最后一行

注意:反向匹配行,是动作前加感叹号 (!d    !s    !c等等)


如果前面的命令直接加入-i,则直接修改文件






  • 上一条:
    Linux命令之cut命令使用介绍
    下一条:
    Linux curl工具使用技巧、使用实例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在Linux系统中使用Iptables实现流量转发功能流程步骤(0个评论)
    • vim学习笔记-入门级需要了解的一些快捷键(0个评论)
    • 在centos7系统中实现分区并格式化挂载一块硬盘到/data目录流程步骤(0个评论)
    • 在Linux系统种查看某一个进程所占用的内存命令(0个评论)
    • Linux中grep命令中的10种高级用法浅析(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2017-07
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-03
    • 2022-04
    • 2022-08
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-06
    • 2023-07
    • 2023-10
    • 2023-12
    • 2024-01
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客