Shell之三剑客sed命令

目录

1.sed编辑器概述

2.sed命令常用选项

3.sed命令常用操作

4.sed命令演示操作部分

4.1 sed作打印

4.2 sed作删除

4.3 sed作替换

4.4 sed作插入

4.5 sed作复制粘贴、剪切粘贴

5.总结


1.sed编辑器概述

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。

sed的工作流程主要包括读取、执行和显示三个过程

    读取:  sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。默认从第一行开始读取。

    执行:  默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。

    显示:  发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

sed命令格式

sed -e '操作' 文件1 文件2 ...  #只有一个‘操作’时-e可以省略;多个‘操作’时不能省略
sed -n -e '操作' 文件1  文件2   #-n忽略显示过程
sed -f 脚本文件 文件1 文件2 ...   #-f调用指定脚本文件中的命令     
sed -i -e '操作' 文件l 文件2 ...   #-i修改文件原始内容

指定多行操作
sed -e 'n{    #n指定行号,在多少行执行以下命令操作
操作1
操作2
}' 文件1 文件2 ...

2.sed命令常用选项

3.sed命令常用操作

4.sed命令演示操作部分

4.1 sed作打印

sed -n -e '行号区间p'                       #根据行号或行区间进行打印

sed -n -e '/字符串/p'                       #根据字符串匹配行进行打印

sed -n -r -e '/正则表达式/p'                #根据正则表达式匹配行进行打印


显示行号和内容

显示行号

显示行特殊符号

sed指定多个操作一同使用的三种方法


以数字形式指定地址进行打印操作

sed -n -e '1,+np' 1.sh

打印第一行后,再连续后续n行


sed 'nq' 1.sh

q:打印前n行信息后自动退出

'p;n':打印奇数行;效果等同于 -e 'p' -e 'n'

'n;p':打印偶数行; 效果等同于 -e 'n' -e 'p'

 sed -n -e '2,${n;p}' 1.sh

~n: 跨n行读取

sed -n -e '1~2p'                        #从第一行开始每隔2行查看

sed -n -e '/xx/p' 1.sh  打印所有文件中包含/xx/的

指定内容显示行号及行号内容



4.2 sed作删除

sed -e '行号区间d'

sed -e '/字符串/d'

sed -r -e '/正则表达式/d'

删除空行的三种方法:

[root@clr /opt]# cat 文件名 | grep -v '^$'
[root@clr /opt]# cat 文件名 | tr -s '\n'
[root@clr /opt]# cat 文件名 | sed '/^$/d'

如何删除所有可登录用户

保留可登录用户(  !取反效果)

如何删除包含部分内容的行


4.3 sed作替换

sed -e '行号区间 s/old/new/g'           
sed -n -e '行号区间 s/old/new/gp'    #打印被修改的行        
sed -e '行号区间 s/old/new/gw 保存文件'     #保存被修改的行

sed -e '/字符串/ s/old/new/g'
sed -r -e '/正则表达式/ s/old/new/g'

4种替换标记:

sed命令替换演示操作部分:

删除所有root

指定具体范围内容进行修改

如何永久关闭swap?



如何保存替换后的结果?

1.将替换后的文件内容重定向输出到新文件夹,保存所有内容

2.使用“w”指定文件夹保存,该方法只能保存修改过的内容

将/bin/bash替换为/sbin/nologin

可以将原本替换前后的三个“/”替换为其他任意相同字符,可以使“/”不用去转义;以下两种方式输出结果相同

字符串位置的交换
sed -r -e 's/(xxx)(xxx)(xxx)/\3\2\1/'

面试题

解释该命令执行的结果sed 's9\945\9\99\98\939g' test.txt

将\945\9\9替换为\98\93

sed -e '行号c 新行内容'
sed -e '/字符串/c 新行内容'


4.4 sed作插入

a(在指定行下面插入行内容)

sed -e '行号区间a 添加行内容'
sed -r -e '/字符串或正则/a 添加行内容'

i(在指定行上面插入行内容)

sed -e '行号区间i 添加行内容'

sed -r -e '/字符串或正则/i 添加行内容'

r(在指定行下面插入整个文件内容)

sed -e '行号区间r 插入文件' 原文件名

4.5 sed作复制粘贴、剪切粘贴

H(复制指定行到剪切板) G(将剪切板内容粘贴到指定行下面)

sed -e '1,3H;$G'           #将1-3行内容复制粘贴到最后一行下面

剪切

sed -e '1,3{H;d};$G'       #将1-3行内容剪切粘贴到最后一行下面

5.总结

打印

删除

替换

插入

复制粘贴、剪切粘贴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值