sed的工作流程主要包括读取,执行和显示3个过程
读取: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或--expression= :表示用指定的命令来输入处理输入的文本文件,只有一个操作命令是省略。一般在执行多的操作命令使用
-f或--file :表示用指定的脚本文件来处理输入的文本文件
-h或者--help:显示帮助
-n,--quiet 或silent:禁止sed编辑器输出,但可以与p命令使用一起输出。
-i:直接修改目标文件
常用操作
s:替换 替换指定字符
d:删除 删除选定的行
a:增加 在当前行下面指定一行指定内容
i:插入,在选定行上面插入一行指定内容
c:替换 将选定的行替换指定内容
y:字符转换,转换前后的字符长度必须相同
p:打印,如果同时指定行,表示打印指定行,如果不指定行,则表示打印所有内容;如果有非打印字符,则以ascll=:打印行号
打印内容命令
sed -n -e “p” 文件
sed -n -e “=” 文件
sed -n -e “l”文件
sed -n -e '=;p’ 文件
sed -n'
使用地址:sed编辑器有两种寻址方式
1.以数字形式表示行区间
2.用文本模式来过滤出行
sed -n “p” 文件
sed -n “$p” ~
sed -n '1,2p' ~
sed -n '3,$p' ~
sed -n '1;+3p' ~ #打印1之后的连续3行 ,即1到4行
sed ‘5q’ ~ 打印前5行信息后退出 q表示退出
sed -n ‘p;n’ ~ 打印奇数行 n表示移动到下一行
sed -n ‘n;p’ 打印偶数行
sed -n ‘/root/p’ /etc/passwd #打印出etcpasswd中包含root的行
sed -n ‘s/root/admin/p’ /etc/passwd #替换etc文件包含root的行并把第一个root替换成admin并打印 /2p 第二个root替换admin /3p 第3个root字符替换admin
*******************面试题:sed ‘s9\945\9\99\98\939’ text.txt
解释:s后面的字符相当于分隔符,这段命令的分隔符位9
所有显示数字为 94599 9893
s/OLD/NEW/z 代表对每行第二个匹配到的字符进行替换
g:代表对每行所有能匹配到的字符进行替换
p:可以结合-n选项只打印替换的行内容
w:可将替换行内容保存到指定的文件里
s/^/添加的字符/ 这是在行首添加内容
s/$/添加的字符/ 这是在行尾添加内容
sed -f 文件
可以在文件里定义多条操作规则
sed 替换命令的字符串分隔符
就看s后面跟的字符,3个分隔符要保持一致,如果遇到跟分隔符相同的字符则需要使用 \ 来转义
sed -i 可以直接修改文件内容,操作前建议先验证命令和备份目标文件
vim vi
命令模式
dd p 剪切 粘贴
yy p 复制 粘贴
末行模式
:1,3 co 10 复制 粘贴
:1,3 m 10 剪切 粘贴
增删改查
删 d
改 s(字符串替换) c(整行替换) y(对应字符进行替换,效果类似tr命令)
查 p
增 a(在行后添加内容) i(在行前插入内容) r(在行后读入文件的内容)
复制粘贴 H(复制到剪切板) G(粘贴到指定行后) 1,3H;10G
剪切粘贴 1,3{H;d};10G