目录
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.总结
打印
删除
替换
插入
复制粘贴、剪切粘贴