目录
sed编辑器
sed 的核心作用
sed 的工作流程
命令格式:
ded 命令常用选项
主要看 sed命令的操作符
默认打印方式:
sed的删除操作
匹配字符串内容删除
字符串搭配正则进行删除:
面试题
删除空行的三种方式
面试题
不删除文件 要删除文件内容
sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。
sed对文本进行增删改查
sed -i :加-i 才会文本文件里生效
sed : 什么都不加就是临时模式,文本的类容是不会发生变化的
读取:: sed 从输入流 中读取一行内容并存储到临时的缓冲区中 (又称模式空间,pattern space)
执行:默认情况下,所有的sed 命今都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行。
显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行
sed | -e | ’操作‘ 文件1 文件2... |
sed | -n -e | ’操作’ 文件1 文件2 ... |
sed | -f | 脚本文件 文件1 文件2 ... |
sed | -i -e | ‘操作’ 文件1 文件2 ... |
-e 或--expression= | 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用 |
-f 或--file= | 表示用指定的脚本文件来处理输入的文本文件。 |
-h 或--help | 显示帮助。 |
-i | 直接修改目标文本文件 慎用!!! 确认了再往里输入 |
-n | 仅显示script处理后的结果 |
sed 命令操作
-e ------ 就类似打印的意思
-f ----- 显示帮助。
-i ----- 直接修改目标文本文件 慎用!!! 确认了再往里输入
s | 替换,替换指定字符。ky27 kyy27 |
d | 删除,删除选定的行 |
a | 增加,在当前行下面增加一行指定内容。 |
i | 插入,在选定行上面插入一行指定内容。 |
c | 替换,将选定行替换为指定内容。 |
y | 字符转换,转换前后的字符长度必须相同。 |
p | 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符, 则以 ASCII 码输出。其通常与“-n”选项一起使用。 |
= | 打印行号。 |
l(小写L) | :打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t) |
r | 扩展正则表达式 |
sed ' '
sed ' ' /etc/fstab : ' '必须要加 不加会报错
sed -e 'p' 5.txt 这样打印出来会多打印一样
sed -n ‘p’ 5.txt 加个-n就可以过滤的sed的默认输出
[root@localhost opt]# sed -n '3p' 7.txt # 打印文件第三行
[root@localhost opt]# sed -n '2p' 7.txt #打印文件第二行
= 打印行号
‘=;p’ 打印行号也显示内容
sed -n '$p' 7.txt #打印最后一行 空格也打印
行号区间范围打印
‘4,$P’ 第四行和最后一行
‘1,3p’ 第一行和第三行打印
Sed ‘d‘ 5.txt 删除所有,什么也不打印
sed -n '3d;p' 5.txt ---删除第三行,打印剩余的所有内容
sed -n '5,8d;p' 5.txt 删除5到8行,打印剩余的所有内容
sed -n '5,$d;p' 5.txt 删除5到最后一行行,打印剩余的所有内容
sed '4,6!d' 5.txt ---除了4-6行,其他的全部删除
如果想生效 sed -i -n 一定要加 -i 才可以
sed '/2/d' 5.txt 删除包含2的行
sed '/2/,/3/d' 5.txt 删除one-six的行
sed '/1/,/7/d' 5.txt ---删除1--7的行 保留8-9行
sed '/4/,/5/!d' 5.txt ---除了4-5的行
sed '/5/!d' test1.txt ---除了5的行,其余的全部删除,反向删除
sed '/^$/d' test1.txt ---通过^$,来删除空行
grep -v "^$" test1.txt ----过滤出非空行
cat test1.txt |tr -s "\n" 压缩换行符
sed '/^$/d' test1.txt -删除空行