sed介绍
粘贴一段wiki的介绍:
sed (stream editor) is a Unix utility that parses and transforms text, using a simple, compact programming language. sed was developed from 1973 to 1974 by Lee E. McMahon of Bell Labs, and is available today for most operating systems.
总的来说就是sed是unix类os下的文本操作工具,负责解析和转换文本
Linux常用的文本工具
文本处理的三驾马车
grep
sed
awk
sed: stream Editor
Features
行编辑器,逐行进行
分为模式空间和保留空间
逐行处理,支持模式匹配(regex)
默认不处理源文件,仅对模式空间中的进行处理
处理结束后将模式空间中的结果输出到屏幕
Usage
sed [option] 'AddressCommond' file
Address(需要处理的行)
StartLine,endLine
比如1,100,表示1-100行
特别注意的是,可以使用$:最后一行
/RegExp/(正则表达式)
比如: /^root/,表示以root开始的行
/pattern1/,/pattern2/
第一次被pattern1匹配到的行开始到被pattern2匹配到的行结束
LineNumber
指定某行
startLine, +N
从startLine开始向后的N行,总共是N+1行
Commonds
sed的命令很多,这里我只列出常用的commonds
d
:删除符合条件的行
p
:显示符合条件的行
a \string
:在匹配的行后追加新行,内容是string
i \string
:在匹配的行前追加新行,内容是string
r FILE
:将指定的文件的内容添加到匹配的行之后
w FILE
:将指定范围内的内容另存到指定的文件中
s /pattern/ReplaceString/修饰符
:将符合模式的字符串替换为ReplaceString(默认只替换每行中第一次被模式匹配到的串)可以使用三个相同的字符来代替’/’,上面的字符串替换等价于
s #pattern#ReplaceString#修饰符
特别的可以使用
&:表示整个模式匹配到的字符串
修饰符:
g
:全局替换
i
:匹配时忽略大小写
Options
-n
:静默模式,不显示模式空间中的内容
-r
:使用扩展的正则表达式
-i
:直接修改源文件(危险慎重使用)
-e 处理 -e 处理
:连续进行sed的处理
-f
:指定处理脚本另外可以使用类似
sed -f SCRIPTFILE file
(将SCRIPTFILE中的每个命令作用在file上)
Examples
- sed ‘1,2d’ /etc/fstab (删除/etc/fstab的第一和第二行)
- sed -n ‘/^\//p’ /etc/fstab (显示/etc/fstab中以/开头的行)
- sed ‘/^\//a #hello world\n#hello,linux’ /etc/fstab (在/etc/fstab中以/开头的行后一行追加”#hello world\n#hello,linux”) (其中\n会换行)
- sed ‘2r /etc/issue’ /etc/fstab (在/etc/fstab中的第二行之后追加/etc/issue文件中的内容)
- sed ‘/oot/w /tmp/oot.txt’ /etc/fstab (将/etc/fstab文件中的包含oot的行的内容另存到/tmp/oot.txt)
- sed ‘s#1..e#&r#g’ sed.txt (将sed.txt中的符合l..e模式的字符串全部在后面加上”r”)
- sed ‘s#(1..e)#\1r#g’ sed.txt (将sed.txt中的符合l..e模式的字符串全部在后面加上”r”)
- sed ‘s#l(..e)#L\1#g’ sed.txt (将sed.txt中的符合l..e模式的字符串的小写的”l”换成大写的”L”)