shell脚本第六阶段---三剑客之sed
一、sed介绍
掌握sed的基本语法结构
熟悉sed常用的命令,如打印p,删除d,插入i等
1.sed的工作流程
文本文件--------------->sed的模式空间(缓冲区)---------------------->sed输出到屏幕
首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。
sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
2.sed使用方法
sed常见的语法格式有两种,一种叫命令行模式,另一种叫脚本模式。
2.1命令行格式
格式
sed [option] 'sed的命令|地址定位' filename
说明:引用shell script中的变量应使用双引号,而非通常使用的单引号option:
-e 进行多项编辑,即对输入行应用多条sed命令时使用
-n 取消默认的输出
-f 指定sed脚本的文件名
-r 使用扩展正则表达式
-i inplace,原地编辑(修改源文件)常用命令和选项
p 打印行
d 删除行
sed -n 'p' a.txt
sed -n '1p' a.txt
sed -n '2p' a.txt
sed -n '1,5p' a.txt
sed -n '5,10p' a.txti\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行 vim
a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾用"\"续行 整行替换sed 'ihello' a.txt
sed '1ihello' a.txt
sed '1ihello\nworld' a.txt
sed '1iheloo\
> world\
> 9999323' 2.txt
sed '2chello world' a.txt
sed '/root/chello world' a.txt
sed '/[a-z]/chello world' 2.txt=============================
命令2(rw!):
r 从文件中读取输入行
w 将所选的行写入文件sed -r '/([0-9]{1,3}\.){3}[0-9]{1,3}/w b.txt' 2.txt============================
! 对所选行以外的所有行应用命令,放到行数之后
sed -n '1!p' 1.txt
sed -n '4p' 1.txt
sed -n '4!p' 1.txt
============================
命令3(sg):
s 用一个字符串替换另一个
g 在行内进行全局替换sed -n 's/root/ROOT/p' a.txt
sed -n 's/root/ROOT/gp' a.txt
sed -n 's/^#//gp' a.txt
===========================
命令4(=&i)& 保存查找串以便在替换中引用 \(\)
sed -n 'root/p' a.txt
sed -n 's/root/#&/p' a.txt= 打印行号
sed -n '/bash$/=' passwd 打印以bash结尾的行的行号
sed -ne '/bash$/=' -ne '/bash$/p' a.txti 直接原地修改源文件
sed -i 's/root/ROOT/g' a.txt其他命令讲解
y命令
该命令与UNIX/Linux中的tr命令类似,字符按照一对一的方式从左到右进行转换
正则表达式元字符对y命令不起作用。与s命令的分隔符一样,斜线可以被替换成其他的字符
sed '39,41y/stu/STU/' /etc/passwd
sed '39,41y/stu:x/STU@%/' /etc/passwdq 退出
sed '5q' 1.txt
sed '/mail/q' 1.txt
sed -r '/^yunwei|^mail/q' 1.txt
3.Sed工具结合正则表达式使用总结
1.如果匹配的是扩展正则表达式,需要使用-r来扩展sed
grep -E
sed -r
+ ? () {n,m} | \d注意:
在正则表达式中如果出现特殊字符(^$.*/[]),需要"\"号做转义
eg:sed '/\$foo/p' file3.逗号分隔符
例如:sed '5,7d' file 删除5-7行3.组合方式
sed '/foo/,+4d' file 删除从匹配字符"foo"开始到其后四行为止的行
sed '/foo/,~3d' file 删除从匹配字符"foo"开始删除到3的倍数行(文件中)