文档章节

挖一下那些年的东东(sed文本处理工具)

August1996_
 August1996_
发布于 2016/05/22 09:27
字数 1005
阅读 11
收藏 0

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法

sed命令行格式为:  

sed [-nefri] ‘command’ 输入文本

   

常用选项:

        -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

        -e∶直接在指令列模式上进行 sed 的动作编辑;

        -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

        -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)

        -i∶直接修改读取的档案内容,而不是由萤幕输出。       

 

常用命令:

        a   ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~

        c   ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

        d   ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;

         i   ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

         p  ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~

         s  ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

 

举例:(假设我们有一文件名为ab)

     删除某行

     [root@localhost ruby] # sed '1d' ab              #删除第一行 

     [root@localhost ruby] # sed '$d' ab              #删除最后一行

     [root@localhost ruby] # sed '1,2d' ab           #删除第一行到第二行

     [root@localhost ruby] # sed '2,$d' ab           #删除第二行到最后一行

 

  显示某行

     [root@localhost ruby] # sed -n '1p' ab           #显示第一行 

     [root@localhost ruby] # sed -n '$p' ab           #显示最后一行

     [root@localhost ruby] # sed -n '1,2p' ab        #显示第一行到第二行

     [root@localhost ruby] # sed -n '2,$p' ab        #显示第二行到最后一行

 

  使用模式进行查询

     [root@localhost ruby] # sed -n '/ruby/p' ab    #查询包括关键字ruby所在所有行

     [root@localhost ruby] # sed -n '/\$/p' ab        #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义

 

  增加一行或多行字符串

  

   [root@localhost ruby]# cat ab

     Hello!

     ruby is me,welcome to my blog.

     end

   [root@localhost ruby] # sed '1a drink tea' ab  #第一行后增加字符串"drink tea"

     Hello!

     drink tea

     ruby is me,welcome to my blog. 

     end    

    [root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"

     Hello!

     drink tea

     ruby is me,welcome to my blog.

     drink tea

     end

     drink tea

     [root@localhost ruby] # sed '1a drink tea\nor coffee' ab   #第一行后增加多行,使用换行符\n

     Hello!

     drink tea

     or coffee

     ruby is me,welcome to my blog.

     end

 

  代替一行或多行

     [root@localhost ruby] # sed '1c Hi' ab                #第一行代替为Hi

     Hi

     ruby is me,welcome to my blog.

     end

     [root@localhost ruby] # sed '1,2c Hi' ab             #第一行到第二行代替为Hi

     Hi

     end

 

  替换一行中的某部分

  格式:sed 's/要替换的字符串/新的字符串/g'   (要替换的字符串可以用正则表达式)

     [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g'    #替换ruby为bird

   [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g'        #删除ruby

 

     插入

     [root@localhost ruby] # sed -i '$a bye' ab         #在文件ab中最后一行直接输入"bye"

     [root@localhost ruby]# cat ab

     Hello!

     ruby is me,welcome to my blog.

     end

     bye

     删除匹配行

      sed -i '/匹配字符串/d'  filename  (注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是)

 

      替换匹配行中的某个字符串

      sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename

本文转载自:

共有 人打赏支持
August1996_
粉丝 2
博文 51
码字总数 29055
作品 0
湛江
程序员
私信 提问
吐槽几个开源的东西

第一个吐槽的就是sed,什么鸟玩意,我只是想在逻辑行的每个开头增加固定的文字,用于makefile里面,结果折腾2个小时,也没试成功,情愿被说我自己sb,写c代码就是分分钟的事情,至少带逻辑行...

中山野鬼
2013/07/05
1K
14
linux下grep、awk和sed工具用法概览

linux下grep、awk和sed工具用法概览 在linux下,grep、awk和sed是非常强大的文本处理工具,其中grep命令主要用作文本搜索,而awk和sed命令侧重于文本的编辑等操作,另外awk本身还可以是编程语...

小陶小陶
2018/09/11
0
0
Linux学习----文本三剑客——sed(马哥教育原创)

来源:马哥教育 我以前的文章介绍过grep了,今天我就来说一下第二个sed,它是stream editor的缩写。在Linux的文本文件中文本存储都是一行,显示时表现的多行其实都是因为有换行符的存在,例如...

Py爱好
2018/08/02
0
0
9.4/9.5 sed工具(上、下)

9.4-9.5 sed命令 sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern s...

Champin
2017/11/21
0
0
第十八章 文本处理流编辑器:sed命令

第十八章 文本处理流编辑器:sed命令 名词解释 sed 是一种流编辑器,它是文本处理常用到的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称...

506554897
2018/07/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前嗅ForeSpider脚本教程:标准对象(一)

今天,小编主要为大家介绍一下:前嗅ForeSpider脚本中的标准对象:爬虫链接类url,urltext采集的所有状态及属性类,html标签节点类domItem和(html)dom类dom。具体内容如下: 一.爬虫链接类...

forespider
4分钟前
0
0
javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify

在使用spring boot整合jpa时出现上述错误,在配置文件中,配置连接数据库的url时,加上useSSL=false url: jdbc:mysql://127.0.0.1:3306/数据库名称?serverTimezone=Asia/Shanghai&useSSL=fa...

朝如青丝暮成雪
13分钟前
0
0
JavaScript 为什么要有 Symbol 类型?

摘要: 为什么比怎么用更有意义。 原文:JavaScript 为什么要有 Symbol 类型 作者:前端小智 Symbols 是 ES6 引入了一个新的数据类型 ,它为 JS 带来了一些好处,尤其是对象属性时。 但是,它...

Fundebug
15分钟前
0
0
vs code 配置.json文件引入makefile文件实现多文件编译

背景: 之前使用VS code写c++时,没使用到多文件,所以对launch.jason和task.jason配置没过多配置,但不支持多文件间的编译,调试。 注:主要针对较大的一些工程,涉及多个文件的编译,使用到...

shzwork
16分钟前
0
0
大神教你Nginx常用基础配置方案

Nginx的fastcgi模块参数设置 Nginx 有两个配置文件fastcgi_params、fastcgi.conf,两者唯一的区别是,fastcgi.conf 多一个参数 SCRIPT_FILENAME,diff显示如下: $diff fastcgi fastcgi_param...

Linux就该这么学
22分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部