ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux sed命令

2022-05-20 17:03:09  阅读:173  来源: 互联网

标签:输出 处理 roc 命令 sed linux txt


 

什么是sed

sed 是 stream editor 的缩写,中文称之为“流编辑器”。

sed 命令是一个面向行处理的工具,它以“行”为处理单位,针对每一行进行处理,处理后的结果会输出到标准输出(STDOUT)。你会发现 sed 命令是很懂礼貌的一个命令,它不会对读取的文件做任何贸然的修改,而是将内容都输出到标准输出中。

sed的结构

sed 的命令格式:

sed command file
  • command 部分:针对每行的内容所要进行的处理(这部分很重要很重要)。
  • file 部分:要处理的文件,如果忽略 file 参数,则 sed 会把标准输入作为处理对象。

sed 的工作原理是什么

刚才我们说了,sed 命令是面向“行”进行处理的,每一次处理一行内容。处理时,sed 会把要处理的行存储在缓冲区中,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。这个缓冲区被称为“模式空间”(pattern space)。

如前面所说,在这个处理过程中,sed 命令并不会对文件本身进行任何更改。

看一个最最简单的 sed 命令的例子

 

现看原文件
# cat test.txt
test01
test02
test03

用sed命令,来删除文件中带符号“2”的行
# sed '/2/d' test.txt
test01
test03

sed操作是在自己的模式空间中执行的,所以是不会改动test.txt原原文件
# cat test.txt
test01
test02
test03
#

  这个命令的 command 部分是/2/d,而且它是用单引号括起来的。

  用到 sed,别忘了用单引号将 command 部分括起来。

  /2/d中的 d 表示删除,意思是说,只要某行内容中含有字符 2,就删掉这一行。(sed 所谓的删除都是在模式空间中执行的,不会真正改动 roc.txt 原文件。)

 

用 sed 命令实现 cut 命令的效果

假如我们想实现类似于 cut-d:-f 1/etc/passwd 的效果,也就是以冒号为间隔符提取第 1 个域,用 sed 命令应该怎么操作呢?

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
# head -n 5 /etc/passwd | sed 's/:.*$//'
root
bin
daemon
adm
lp

  command 部分指定成了's/:.*$//',表示我们要把每一行的第一个冒号到结尾的部分都清空,这样留下的便是第一个冒号前的内容啦。

 这里 command用到的是s命令s命令的语法格式如下:

s/regexp/replacement/[flags]
regexp是要查找匹配的正则 replacement是替换内容 [flags]是可选的,用来添加一些额外标记参数

sed 都有哪些好用的选项

说到 sed 命令的选项,就不得不提-n选项,想把这个选项介绍清楚,还是要费一些脑子和笔墨的。

前面提到,sed 会将模式空间里的行经过处理后输出到标准输出,这是默认的处理方式。也就是说,除非你使用“d”来删除此行,否则经过“模式空间”处理的行都是会被输出到标准输出(屏幕)上的。我们一起来看下面的例子:

#还是先来看看原文件的内容
[roc@roclinux ~]$ cat roc.txt
1
2
3
4
5
 
#仔细看, 输出中出现了两个“4”
[roc@roclinux ~]$ sed ‘/4/p’ roc.txt
1
2
3
4
4
5

  

看,所有的原始文件内容都被输出来了,而且含有字符4的行被输出了两遍。


但这就是 sed 命令的工作原理,它会不问青红皂白地把经过处理的行先输出出来,然后再执行后面的动作。(在这里我们设定了 p,表示打印此行。)这明显不符合我们的初衷,我们只是想让 sed 命令找到含有 4 的行再输出。

这时候,不妨加上-n选项试一试,你会发现,结果变得如你所愿了。

[roc@roclinux ~]$ sed -n '/4/p' roc.txt
4


-n选项会很严肃地警告 sed 命令:除非是明确表明要输出的行,否则不要给我胡乱输出。-n选项经常和 p 配合使用,其含义就是,输出那些匹配的行。  

 

标签:输出,处理,roc,命令,sed,linux,txt
来源: https://www.cnblogs.com/lei2017/p/16292915.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有