set的定义:
sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。
sed的执行过程:
读取 目标文件 的每行数据依次加入到缓冲区(模式空间)里,默认从第一行开始读取
执行 使用定义的增删改查命令来处理读取到缓冲区行数据
显示 将处理后的行数据输出到屏幕显示
命令格式:
案例:打印cat.txt 文件的内容
1.sed -选项 ‘操作’ 文件名1 文件名2 ...
2.sed -n '{
}' 文件名
选项:
-e :表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,执行多个操作命令要多几个e的使用
-f :表示用指定的脚本文件来处理输入的文本文件。
-h 或--help:显示帮助。
-n --quiet 或 silent:禁止sed编辑器输出,但可以与p命令一起使用完成输出。
-i:直接修改目标文本文件。
常用操作:
s:替换,替换指定字符。
d:删除,删除选定的行。
a:增加,在当前行下面增加一行指定内容。
i:插入,在选定行上面插入一行指定内容。
c:替换,将选定行替换为指定内容。
y:字符转换,转换前后的字符长度必须相同。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。
=:打印行号。
l(小写L):打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)
常用操作演示:
一.打印内容 p(打印行内容) =(打印行号) l(打印ASCII字符)
sed -n -e '行号区间p' #根据行号或行区间进行打印 打印第一行内容
sed -n -e '/字符串/p' #根据字符串匹配行进行打印 打印包括字符串e的行内容
sed -n -r -e '/正则表达式/p' #根据正则表达式匹配行进行打印 要使用扩展元字符要使用-r
打印以o为开头的行内容
sed -n -e '1~2p' #从第一行开始每隔2行查看
案例: 打印显示奇数行和偶数行
二.删除删除 d
sed -e '行号区间d' 文件名 删除第一行行内容
sed -e '/字符串/d 删除空行内容
注意一下下面的案例
sed -r -e '/正则表达式/d' 扩展元字符需要用 r 删除以o为开头的字符
三.替换 s(字符串替换) c(整行内容替换) y(对应字符替换)
s:字符串替换
sed -e '行号区间 s/old/new/g' sed -n -e '行号区间 s/old/new/gp' #打印被修改的行
修改/etc/yum.conf 文件第一行到第12行 开头+#
sed -e '行号区间 s/old/new/gw 保存文件' #保存被修改的行
sed -e '/字符串/ s/old/new/g' g的位置可以指定数字 代表修改第几个sed -r -e '/正则表达式/ s/old/new/g' 扩展元字符需要加 -r
sed -r -e 's/(xxx)(xxx)(xxx)/\3\2\1/' 扩展元字符需要加 -r
c:整行内容替换
sed -e '行号c 新行内容'
sed -e '/字符串/c 新行内容'
y: 对应字符替换
sed -e 'y/旧字符/新字符/' #注:新字符和旧字符的长度要一致
四.插入:
a(在指定行下面插入行内容)
sed -e '行号区间a 行内容'
sed -r -e '/字符串或正则/a 行内容'
i(在指定行上面插入行内容)
sed -e '行号区间i 行内容'
sed -r -e '/字符串或正则/i 行内容'
r(在指定行下面插入整个文件内容)
五.复制粘贴 H(复制指定行到剪切板) G(将剪切板内容粘贴到指定行下面)
sed -e '1,3H;$G' #将1-3行内容复制粘贴到最后一行下面
sed -e '1,3{H;d};$G' #将1-3行内容剪切粘贴到最后一行下面