sed基础命令
原文出处:https://www.cnblogs.com/My-IronMan/p/15717017.html
原文出处:https://blog.csdn.net/kissdragan/article/details/128006260
1.sed作用
sed是linux中,流媒体编辑器
sed : 修改文件
2.sed命令格式
sed [参数] '处理结果' [操作对象]
3.参数
-e:允许多项编辑 -n:取消默认输出 -i:就地编辑(直接修改原文件) -r:支持扩展正则
4.sed的编辑模式
d:删除
p:打印
a:在当前行后添加一行或者多行,多行使用换行符\n
i:在指定行前插入数据
5.sed参数解析用法
1.指定删除文件第三行和第六行内容之多项编辑 案例: sed -e '3d' -e '6d' 1.txt 2.指定打印取消默认输出(只显示打印出的第五行内容) 案例 sed -n '5p' 1.txt 3.就地编辑(直接编辑到文件内) 案例:将第5行的文件复制到1.txt里面
sed -i '5p' 1.txt
4.扩展正则(跟grep-E功能是一样的《普通正则是默认支持的,特殊正则需要使用扩展》)
案例: 定位删除两个斜线正则当中的内容'/123/d'就是匹配文件内123!
sed -r '/123/d' 1.txt
二:sed 参数 -f 案例实战解析
1.前介
扩展正则(跟grep-E功能是一样的《普通正则是默认支持的,特殊正则需要使用扩展》) 案例: 定位删除两个斜线正则当中的内容'/123/d'就是匹配文件内123! sed -r '/123/d' 1.txt
2.引入简介
如果我们的扩展正则写的非常复杂的话,这个地方会非常容易写错。
所有说我们用到了以下方法:
就像面向对象中为了解决对象与对象之间的代码冗余的问题,我们用到了类一样。
3.方法流程(根据提供的规则命令匹配)
4.在 2.txt文件中编写
vim 2.txt

5.根据提供的规则命令匹配并删除数据

sed -f 2.txt 1.txt
1. '/123/d' :匹配规则 2. 匹配规则可以放在 2.txt 文件内 3. -f 参数来指定规则文件(2.txt) 4. 来操作后面1.txt的操作对象

三:sed的编辑模式
d:删除
p:打印
a:在当前行后添加一行或多行
在sed中最中最重要的就是 定位 与编辑模式!
1.定位介绍解析
1.数字定位法 解释: 就是指定多少行,指定行号。 案例1('3d'代表删除第三行行) sed '3d' 1.txt 案例2('2,3d'代表删除2行和3行) sed '2,3d' 1.txt 2.正则定位法 解释: 就是把数字的定位改成正则的定位(指定正则定位法) 案例1(删除以g开头的行) sed '/^g/d' 4.txt 案例2(删除以包含g的行) sed '/g/d' 4.txt 3.数字和正则定位法 解释: 就是指定一个数字后面是正则 案例1(从第三行开始删除到g结尾的行结束,$在字符串后面,只匹配到最近符合要求的行) sed '3,/g$/d' 4.txt 4.正则和正则定位法 解释: 就是指定一个正则后面一个正则 案例1(删除以g开头的行到以j结尾的行结束,$只匹配到最近符合要求的行)
sed '/^g/,/j$/d' 4.txt
5,"$"代表最后一行
解释:如果$不在字符串后面就表示到最后一行
如果动作是"2,$d",则代表从第二行删除到最后一行
2.sed的编辑模式
d:删除 p:打印 a:在当前行后添加一行或多行,多行用换行符\n分割 案例1:(指定在文件第二行后添加xxx内容) sed '2axxx' 1.txt c : 用新文件修改(替换)当前行 案例2:(指定替换(修改)第二行内容为xxx) sed '2cxxx' 1.txt i : 在当前行之前,插入文本(单独使用时) 案例3:(指定在第二行之前插入/添加xxx内容) sed '2ixxx' 1.txt r : 在文件中读内容 案例4:(将2.txt文件的内容,读到/添加到1.txt中的第二行后) sed '2r 2.txt' 1.txt w : 将指定行写入文件 案例5:(将2.txt文件内容第二行写入w.txt文件内) 注:2.txt写入到w.txt内时会将w.txt之前内容清空写入 sed '2w w.txt' 2.txt y : 将字符转换成另一个字符 案例6:(将4第二行的小写f替换成大写F《只替换字符》) sed '2y/f/F/' 4.txt 案例7:(将4第二行的小写f和a替换成大写F和A《只替换字符》) sed '2y/fa/FA/' 4.txt 注: 单个称为字符! 单个以上为字符串! s : 将字符串转换成另一个字符串(每一行只替换一次) 案例8:(将文件内11替换成22) sed 's/11/22/' 4.txt g : 全部执行 案例9:(全部替换g模式 加 s模式) sed 's/11/22/g' 1.xtt i : 忽略大小写(跟 s 模式以前使用时) 案例10:(在文件内替换时没有大写F,只有小写时配合使用i《忽略大小写》) sed 's/F/abc/gi' 4.txt
sed元字符

sed实战案例
1. 将nginx.conf中的注释全部去掉
sed '/^ *#/d' /etc/nginx/nginx.conf 步骤: 先匹配到注释#行,^以空格开头,匹配0个或者多个#,然后删除到匹配的#进行删除d
^:以什么开头
*:匹配0次或者多次
d:删除
2. 将nginx.com中每一行之前增加注释
sed 's/.*/#&/g' /etc/nginx/nginx.conf s g : 全部替换 .:匹配所有除换行符以外的单个字符 *:匹配0次或者多次 /.*/ : 匹配除换行符以外所有的内容 /#&/ : 定义替换内容 &: 代表前面匹配到的内容 相当于.*匹配到的内容,& 相当于变量名
3、要求一键修改本机的ip
197.168.15.100 sed -i 's/\.100/\.101/g' /etc/sysconfig/network-scripts/ifcfg-eth0 i : 代表就地编辑 s g : 全部替换 \ : 转义符
4、将/etc/passwd中的root修改成ROOT
sed -i 's/root/ROOT/g' /etc/passwd