导航

sed命令简单归档

sed:

工作原理:从文件或者标准输入读取数据,将起复制到pattern space(模式空间)缓冲区(复制输入源的一行数据),接着sed的编辑命令对数据进行处理,比如追加、插入、替换等等,处理完后,sed将数据发送到stdout(标准输出),可以利用管道、重定向符号等等修改输出源,处理完第一行后,sed接着读取下一行,重复此过程,直到命令行或者脚本命令执行完毕。

sed命令不仅仅存在pattern space,还存在一个hold space,风骚组合

 

sed格式:

sed [选项] 'sed命令' [输入文件...]

 

一、常用选项:

-n        取消自动打印模式空间(sed默认会自动打印pattern sapce内容,而-n则会取消打印,一般配合p使用)

-e        将-e选项后的命令解释成编辑命令

-i          修改原始文件

 

二、sed命令

sed命令由两部分组成:定位文本和sed编辑命令。定位、定位,字面意思;编辑命令通俗点就是对定位的文本的处理动作

定位文本:

一篇文章,如何将鼠标定位到具体的位置?

1、行号,指定某一行,或者圈定范围(2-5行)

2、使用正则表达式定位(^, $ .....)

具体如下:

x            x为指定的行号,$表示最后一行,sed -n '$p" /etc/passwd

x,y           指定从x到y的行号范围

/pattern/        查询包含模式的行,比如/root/ 查找包含root字符串的行

/pattern1/,/pattern2/   查询从模式pattern1到模式pattern2的行,谨慎使用,比如/root1/,/root2/ 查找到第一个root1到root2后,文本后再次出现root1 root2再             次显示之间的范围

/pattern/, +n       从pattern行到之后的x行之间范围,同时也存在/pattern1/,/pattern2/的再查找情况(定位模式(行),+x行)

 

x~step          step为步长定位x行,然后每step行后,显示一行

第二行为开始行,2+7=9+7=16+7=23...,最后不足则不显示(总共38行,只显示到第37行)

/pattern/,~n        定位模式行pattern,显示pattern行到n的倍数行

 

到此定位文本结束,懵逼路上懵逼人

 

sed编辑命令:

三大杀道:追加(追杀)、插入(刺杀)、替换(幻杀)

a\ text            append 追加文本

i\ text             insert 插入文本

c\ text            replace 替换文本

 

 其他两个不演示

r filename          append a line read from filename.

 

 '/#/d;p'  删除/etc/fstab文件中包含#的注释行,同时'/home/r /etc/hosts' 将文件/etc/hosts内容追加到模式/home的下一行

w  filename          Write the current pattern space to filename 将当前pattern space内容写入到指定文件内

 

s/pattern/replacement/flags      查找pattern,替换成replacement,flags是对动作的进一步解释

flags标记:

g                  对数据中所有匹配的内容进行替换(全局替换),如果没有g,默认替换第一个pattern,例如一行中有3个pattern

                   则替换第一个pattern

p                  通常与-n选项结合使用,表示打印替换的行

(没有使用g时,默认替换第一个parrern,所以第二次出现的root没有被替换掉,使用了g后,所有出现的都给替换掉)

n                  1~512之间的数字,表示指定第几次出现的pattern,进行替换操作

&                  正则表达式,含义为pattern的“软链接”

 

 

 (之所以只打印一行root是因为,下一次包含的root的行只有一个root,p参数没有对其进行操作,所以没有打印出来,同时此处很容易看出,&就是root)

w filename              将缓冲区中的内容写到指定的filename文件中

 

一组例子:

1、在/etc/passwd所有的root后面插入单词(语句)text(通过a\ i\都没办法实现效果,只有s通过替换的形式达到插入的目的)

2、显示控制字符(注意:各个系统控制字符可能不同) sed l (小写字符L)

 

 

 (空格tab是显示的字符,所谓的控制字符就是非打印字符,例如回车、F1键等等)

3、{}符号表示在定位上执行的命令组,同时s与正则表达式结合使用也很风骚

 

 (这里的s的定界符设为了@,不一定非要为/)

4、{}组合套装,修改定界符为@,正则表达式$将结尾修改为?

 

 同时可以利用s将空格全部删除掉s/ //g(s后面的两个//中间是空格,最后两个//中间则无任何字符)

5、正则表达式\1

posted on 2021-03-05 22:08    阅读(146)  评论(0)    收藏  举报