目录
一、sed介绍
sed是一种流编辑器,在会编辑器处理数据之前基于预先提供的一组规则来编辑数据流(依次处理每行的内容)
sed编辑器可以根据命令来处理数据流中(一行一行的处理)的数据,这些命令要么从命令行中输出,要么存储在一个命令文本文件中
注:所有的sed命令都在模式空间中执行 源文件内容不会改变 除非用重定向存储输出到文件里
sed的工作流程有三个过程
读取 | sed从输入流中读取一行内容并存储到临时的缓冲区中 又称模式空间 |
执行 | 默认情况下,所有的sed命令都在模式空间中顺序的执行,除非指定了行的地址 否则sed命令 将会在所有的行上依次执行 |
显示 | 发送修改后的内容到输出流 在发送数据后,模式空间将会被清空 在所有文件内容被处理完成之前,上述过程将重复执行,直至所有内容被处理完 |
二、命令格式
sed -e '操作' 文件1 文件2....
sed -n -e '操作' 文件1 文件2....
sed -f 脚本文件 文件1 文件2....
sed -i -e '操作' 文件1 文件2.....
sed -e 'n{
操作1
操作2
...
}' 文件1 文件2
常用选项:
-e | 表示用指定命令来处理输入的文本文件,只有一个命令的话可以省略,多个的话要使用 |
-f | 表示用指定的脚本文件来处理输入的文本文件 |
-h | 显示帮助 |
-n | 禁止sed编辑器输出 但可以与p命令一起使用完成输出 |
-i | 直接修改目标文本文件 |
常用操作:
s | 替换,替换指定字符 |
d | 删除,删除选定的行 |
a | 增加 ,在当前行下面增加一行指定内容 |
i | 插入,在选定行上面插入一行指定内容 |
c | 替换,将选定行替换为指定内容 |
y | 字符转换,转换前后的字符长度必须相同 |
p | 打印 如果同时指定行 表示打印指定行 如果不指定,则表示打印的所有内容 如果有非打印字符 则以ASCll输出 |
= | 打印行号 |
i | 打印数据流中的文本和不可打印的ASCLL字符 比如$ \t |
案例操作:
众所周知sed有三个流程 -n就是禁止第三个输出流程跟p一起使用 就只显示一次内容,如果有但是没有-n就会重复输出内容
只显示第一行
a表示在当前下一行插入内容 i表示在当前上一行插入内容 4c表示替换第4行内容
显示1-3行中间用 ,逗号
显示第3行到最后一行最后用$表示
打印1后面的连续3行 用+号来表示 +几就是几行
打印到第4行内容是后退出 用q来表示 退出 注意在这里想要显示 去掉-n就行了
打印奇数偶数 用n来表示 注意 n是用来表示下一行内容 跟p一起使用 n;p就是本来流编辑器从第一杠开始显示 但是遇到n了 即表示要到下一行 1的下一行就是2 然后输出2 然后重3开始显示 但是有遇到n 表示在3的下一行 就是4 然后p打印出来
p;n反之
p;n是奇数 n;p是偶数
~表示 间隔数 1~2代表从第一行开始间隔2行然后输出即1~3可以利用这个显示奇数偶数
间隔的数包含从第几行开始 1~2 2代表间隔2个 1 2 为2个然后从3开始
'/ xxx/ ' 文件 表示包含xxx这行内容打印出来 可以用来查找 /^xxx/ 代表以xxx为开头的 /xxx$/ 表示xxx为结尾的
只显示行号 用 = 来表示
打印ASCGLL字符 用 I 表示
d 用来表示删除 行 可以通过行号来指定删除第几行 如果直接d 的话 表示每行都删除 就没有内容显示
也可以 指定删除第几行的内容 中间用 , 号表示
删除空行用‘/^$’
替换 s来表示 's/旧字符/新字符/p 下面例子意思就是把 root 换成admin 但是只有第一处换了 要想全部替换 加个 g
sed复制粘贴
sed‘行号H;行号G’