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

 

posted @ 2023-02-16 16:30  LaniLai  阅读(46)  评论(0)    收藏  举报