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行的文本
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表示插入空行
learn operating system.
unix linux which one you choose.
```
在指定位置插入内容删掉指定行
例如sed'1d'sed_learn.txt表示删掉第一行
删掉指定范围的行
sed '1,2d' sed_learn.txt //表示删除1到2行
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替换成空格多命令模式
在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.

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,还须要指定具体要对这些行进行前述处理
参考资料