sed命令整体可以干嘛

总体而言,sed命令可以对文本进行查找、删除、插入、替换等操作。它跟vim或则vi命令最大的去区别是,前者只能通过人工交互的方法,对文本进行处理。而好多时侯,我们希望脚本手动化的进行文本处理,这么sed无疑是我们的好帮手

命令简介

sed OPTIONS [SCRIPT] [INPUTFILE...] 

unix is great os. unix is opensource. unix is free os.
learn operating system.
unix linux which one you choose.

查找

在script中,以p做为查找输出命令,意即print

查找指定行数的内容并复印

复印1到2行的文本

linux命令vi_sed命令自动化脚本_sed命令文本处理

sed -n '1,2 p' sed_learn.txt  

输出结果

unix is great os. unix is opensource. unix is free os.
learn operating system.

上述搜索复印使用到了参数-n,详尽讲解

查找指定关键字所在的行,并复印

复印包含unix关键字的行sed-n'/unix/p'sed_learn.txt,输出结果如下

unix is great os. unix is opensource. unix is free os.
unix linux which one you choose.

其中两斜杠/unix/中间,不仅可以指定关键字,还可以指定正则表达式

插入插入空行

使用G表示插入空行

linux命令vi_sed命令文本处理_sed命令自动化脚本

learn operating system.
unix linux which one you choose.
```

在指定位置插入内容删掉指定行

例如sed'1d'sed_learn.txt表示删掉第一行

删掉指定范围的行

sed '1,2d' sed_learn.txt //表示删除1到2行

sed命令自动化脚本_sed命令文本处理_linux命令vi

sed '1,$d' sed_learn.txt //表示删除1到最后一行

删掉最后一行

sed '$d' sed_learn.txt

搜索指定的位置的行

sed '/unix/d' sed_learn.txt  //表示删除所有包含unix的行

删掉所有空行

sed '/^$/d' sed_learn.txt

替换

替换命令的脚本格式通常为sedline_number1,line_number2'

s/search_keyword_or_regular_express/string_for_replace/search_range_for_one_line'

给文本编号给所有行编号:sed=sed_learn.txt|sed'N;s/n/t/',其中等号=是给文本每行后面插入一个带数字的行,因为换行了,所以管线符前面将换行符n弄成了制表符t。其实我们可以直接换成空格sed=sed_learn.txt|sed'N;s/n//给非空行编号:sed'/./='a.txt|sed'/./N;s/n//',通过/./匹配到所有非空的行,之后使用=编号。最后,再将换行符n替换成空格多命令模式

sed命令文本处理_linux命令vi_sed命令自动化脚本

在script中linux命令vi,可以指定多组命令,用分号隔开就行

例如sed'G'sed_learn.txt,表示插入一个空行而sed'G;G'sed_learn.txt表示插入两个空行

一些option参数就地更改-i

后面讲的所有查询、删除、替换,都是直接将处理结果输出到终端,为了保留这种处理结果,我们可以使用重定向到某个文件进行保存linux命令vi,例如sed'/unix/d'sed_learn.txt>result.txt。但我们也可以通过指定-i参数,直接将更改后的结果,更新到原文件,这儿的-i代表inplace即为就地的意思

比如sed-i'1,$s/unix/linux/g'sed_learn.txt会将sed_learn.txt的内容,直接更新为如下

linux is great os. linux is opensource. linux is free os.
learn operating system.
linux linux which one you choose.

只输出匹配到的文本-n

默认情况下,p指令会将所有文本复印下来,并将匹配到文本进行重复复印。诸如执行sed'1,2p'sed_learn.txt,其结果如下linux培训学校,

unix is great os. unix is opensource. unix is free os.

linux命令vi_sed命令文本处理_sed命令自动化脚本

unix is great os. unix is opensource. unix is free os. learn operating system. learn operating system. unix linux which one you choose.

可以看见,它不光把第三行的内容也输出了,还把1,2行进行了重复复印。而-n则可以只复印匹配到的内容,且不重复

总结

基本上,sed命令,都是先定位到某行,或某行的某个位置,之后进行相应的处理。除此之外linux命令vi,还须要指定具体要对这些行进行前述处理

参考资料

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复