找回密码
 请使用中文注册

Linux中sed命令简介

2023-5-5 22:28| 发布者: 开心| 查看: 11| 评论: 0

阅读字号:

摘要:   利用被称为管道操作符的|,多个命令由管道连成了管道线。在UNIX或Linux系统中,流过管道线的信息(数据)就叫做流(stream)。为了编辑或修改一条管道中的信息,就运 ...
      利用被称为管道操作符的|,多个命令由管道连成了管道线。在UNIX或Linux系统中,流过管道线的信息(数据)就叫做流(stream)。为了编辑或修改一条管道中的信息,就运用流编辑器(stream editor),这也正是sed这个命令名字的由来。其中,s是stream的第一个字母,而ed是editor(编辑器)的头两个字母。
  sed命令是构建在一个叫做ed的旧版的行编辑器之上的。sed命令的语法格式如下:
sed [选项]……{以引号括起来的命令表达式} [输入文件]
  其中,最常用的命令表达式是在一个文件中的指定数据行的范围内抽取某一模式(字符串),并用新的模式替代它。这个命令表达式的通用格式为:s/旧模式/新模式/标注,在这里s是substitute(替代)的首字母,而两个最常用的标志分别是g和n。g是globally(全局地)的首字母,表示要替代每一行中所出现的所有模式。n告诉sed只替代前n行中所出现的模式。

  以下通过一些例子来演示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命令替代后的数据,利用输出重定向再生成一个文件就行了。

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|手机版|家电维修论坛 ( 蜀ICP备19011473号-4 川公网安备51102502000164号 )

GMT+8, 2025-8-18 01:59 , Processed in 0.175830 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

返回顶部