Linux命令之sed使用入门概述

Posted Clitter的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux命令之sed使用入门概述相关的知识,希望对你有一定的参考价值。

sed:stream editor,Linux的一款流编辑器,主要对文本内容进行过滤与替换。使用命令man sed,可以看到对sed命令的介绍

 

下文总体指导思想:

对于sed的工作过程,个人认为如果不是非要把sed的所有功能都学会,是不需要把工作过程搞懂的。绝大部分人,特别针对于想要先尽快上手的人,掌握如何使用基本的sed功能应该比较重要的!

学习sed命令的使用,主要还是结合man sed中的提示来学习:

sed synopsis(大纲):命令的格式

  • sed 【option】【script】【input_file】

sed使用的学问就是在上面三个标记颜色的区域,下面简述这三个区域:

【option】域:作用主要是指定sed处理完数据后应该怎么呈现结果(可能描述不是很恰当),比如结果怎么显示,要不要对文本本身修改等。

空:当不指定参数时,sed为将处理的文本内容原样输出,即不过做什么操作,文件的文本内容都先显示

-n: (silent,也称为静默模式)取消默认输出,即与上面相反。只将进行过相应处理的行打印输出,没有匹配到的行不原样输出。

-i:sed直接操作文本内容,对其的任何内容修改都会更改文件。(sed默认不是对文件的文本内容进行操作,而是拷贝其内容到自己的工作空间中在进行操作 

【script】域:该域的作用是指定对某哪些行做某哪些操作!

  该域其实是分为两个部分:指定行+操作(address+command),前者可以少但后者不能少!

  • 怎么表现要处理的行:address
  • 要进行哪些操作:command

  如何表示行呢?有以下选项:(90%的主要写法,个别较少使用不适合入门理解未写上)

  1. number:直接指定一个数字,如5,即操作的行对象是第5行
  2. first~step:直接上例子(3~4),指的是从第三行开始匹配,之后每隔4行就被匹配到。因此,第3,7,11,...行将是被操作的行。first指要匹配的第一行,step指从第first行之后,每隔step行的行就被匹配到,linux man手册的例子是(1~2),匹配的是所有奇数行,作为加深印象的例子
  3. $:直接一个$,匹配文本的最后一行
  4. /regexp/\\cregexpc :匹配符合正则表达式的行,注意:c可以是任意字符只需保证首尾一致!(这里着重不是讲正则表达式,不熟悉的要参见其他笔记)
  5. addr1,addr2:如(1,5)匹配1到5行,第1行和第5行都将会被匹配到
  6. addr1,+N:如(1,+5)匹配第1行之后,在往后匹配5行,也就是一共匹配6行。即将匹配第addr1行以及接下来N行
  7. addr1,~N:如(10,~8)匹配第10行到第16行(最近一个是8的倍数那一行)。即将匹配第addr1行以及后面最近一个行号是N的倍数的行

  如何表示操作呢?有以下选项:(60%主要写法,涉及保持空间的参数未列入)

    允许没有地址或只有1个地址的参数:

  1. =:打印正在操作的行,即当前行
  2. a \\text:以另起新行的形式,追加text内容在指定的行后面,支持使用\\n实现多行插入
  3. i \\text:以另起新行的形式,追加text内容在指定的行前面,支持使用\\n实现多行插入
  4. r filename:从指定文件中读取内容追加到当前行合并

    允许匹配一个地址范围的参数:

  1. d:删除当前行(删除模式空间中的内容)
  2. c \\text:以text内容替换指定的行,支持使用\\n实现多行插入
  3. p:打印当前行(即打印当前模式空间)
  4. s/regexp/replacement/:对操作行使用正则表达式匹配指定内容,用replacement替换
  5. {;}:若一次不止进行一个操作,可以将多个操作参数用{}包括进来,参数之间可以用;隔开,如{a \\text;p}

【input_file】域:指定要处理的文件

 

举2个栗子

test文件内容如下:

 

1、sed -n \'4,7p\' test01

-n:对应option域;\'4,7p\':对应script域,其中4,7对于address部分,p匹配操作参数部分;test01:对应input-file域

含义:对第4到7行进行打印输出(p参数),-n选项表示静默输出,此时不输出原文本;不加-n参数时如下:

 

2、sed -i \'4,+2s/[0-9]/12345/\' test

当不加-i参数时,修改不影响原文本内容

加-i参数后,修改会被写入原文本内容

 含义:对test文件的第4行开始,往后2行(即4,5,6三行)所匹配到的内容进行替换,[0-9]匹配一个数字,将该数字替换为12345,写入原文件中。

 

总结:个人认为sed的学习入门以此作为概览是不错的选择,以上的解释表述了如下问题:

1、sed命令的语法

2、sed命令各种部分的含义,以及分别有哪些简单,易理解的可选参数

3、简单的使用示例

 

深入的教程本文没有涉及,本文中有出错不妥之处,请读者提出指正~

以上是关于Linux命令之sed使用入门概述的主要内容,如果未能解决你的问题,请参考以下文章

linux之文本内容替换命令sed

linux sed命令

linux之sed命令详解

linux sed命令就是这么简单

Linux基本命令之sed

Linux命令之字符替换压缩删除tr