迅维网

Linux中sed命令简介

xinhua668 2017-9-11 10:25


  利用被称为管道操作符的|,多个命令由管道连成了管道线。在UNIX或Linux系统中,流过管道线的信息(数据)就叫做流(stream)。为了编辑或修改一条管道中的信息,就运用流编辑器(stream editor),这也正是sed这个命令名字的由来。其中,s是stream的第一个字母,而ed是editor(编辑器)的头两个字母。

  sed命令是构建在一个叫做ed的旧版的行编辑器之上的。sed命令的语法格式如下:

sed [选项]……{以引号括起来的命令表达式} [输入文件]

  其中,最常用的命令表达式是在一个文件中的指定数据行的范围内抽取某一模式(字符串),并用新的模式替代它。这个命令表达式的通用格式为:s/旧模式/新模式/标注,在这里s是substitute(替代)的首字母,而两个最常用的标志分别是g和n。g是globally(全局地)的首字母,表示要替代每一行中所出现的所有模式。n告诉sed只替代前n行中所出现的模式。


Linux中sed命令简介

  以下通过一些例子来演示sed命令的常用方式:还记得emp.fmt文件吗?该文件中字段的分隔符是空格。这就存在一个问题,如果某一个字段的字符串本身就包括了空格,就会造成混淆。为此,我们可以运用sed命令将所有的空格都转换成分号(;)。sed命令中的-e选项的e应该是expression(表达式)的首字母,而表达式's/ /;/' 表示在由管道送来的每行数据中搜寻空格之后用分号取代:

root@promote:~/backup# cat emp.fmt | sed -e 's/ /;/'
7369;SMITH CLERK 800 17-DEC-80
7499;ALLEN SALESMAN 1600 20-DEC-81

  我们发现sed命令只替代了每行数据中的第一个空格,因为sed命令默认只搜索并替代所发现的第一个与搜索模式相匹配的字符(串)。为了替代每一行中的所有空格,需要运用g标志:

root@promote:~/backup# cat emp.fmt | sed -e 's/ /;/g'
7369;SMITH;CLERK;800;17-DEC-80
7499;ALLEN;SALESMAN;1600;20-DEC-81

  其实,即使不运用管道线,也可以获得相同的效果,而且看上去更简单些:
root@promote:~/backup# sed -e 's/ /;/g' emp.fmt
7369;SMITH;CLERK;800;17-DEC-80
7499;ALLEN;SALESMAN;1600;20-DEC-81

  虽然看上去简单些,但是有不少UNIX或Linx的大虾们还是偏爱运用管道操作,可能的原因是“看上去非常专业”,因为没有UNIX或Linux背景的用户看上去有点晕。

  注意:以上的任何命令都不改变源文件(emp.fmt)中的任何信息。如果要保存经过sed命令替代后的数据,利用输出重定向再生成一个文件就行了。


雷人

握手

鲜花

鸡蛋

路过
收藏
来自: 今日头条
发表评论

最新评论

引用 灵魂禁锢 2017-9-11 10:25
不错啊,基础又有内容
引用 灵魂禁锢 2017-9-11 10:25
太基础了吧,就一个s命令

发表评论

登录 后可参与评论
返回顶部
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索