sed基本用法:
sed:Stream EDitor
sed行编辑器,主要逐行处理文本
sed将某行读取到内存中,在内存中编辑后打印到屏幕;对于sed而言,该段内存空间叫做模式空间
模式空间:sed所处理的文本需要做模式过虑,符合模式的就加载到模式空间处理,再使用处理命令进行处理,处理完输出到屏幕。默认sed对源文件不做任何处理,仅对模式空间中的数据做处理。处理完成后将模式空间打印到屏幕,若要禁用默认设置,则使用-n选项。
man sed 查看用法
sed命令使用格式
sed [option] ‘AddressCommand’ file …
-n 静默模式,不再默认显示模式空间中的内容
-i 直接修改源文件
-e SCRIPT -e SCRIPT :可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
eg:sed -f /path/to/scripts file #使用脚本文件中命令 /path/to/scripts 来处理file
-r 表示使用扩展正则表达式
Address:地址,行范围
Command:要施加的命令
file:要处理的文件
格式:
Address:
1.StartLine,EndLine
比如:1,100
$:表示最后一行
$-1:倒数第二行
2.使用正则表达式指定模式/RegExp/
比如:/^root/
3./pattern1/,/pattern2/
表示处理该文件中第一次被模式1(/pattern1/)匹配到的行开始至第一次被模式2(/pattern2/)匹配到的行结束中间所有的行
4.LineNumber
精确处理指定的行
5.StartLine,+N
从StartLine开始,向后的N行;总N+1行
Command:
d:删除符合条件的行;
sed ‘1,3d’ /etc/fstab
#删除fstab 1-3行内容,没在地址中的没被删除,还在模式空间中并被打印出来。
sed ‘/oot/d’ /etc/fatab
#删除含有oot的行
sed ‘1,+2d’ /etc/fstab
#删除fstab 1-3行内容
sed ‘/^\//d’ /etc/fatab
#删除以/开头的行, ‘\’ 转义字符
p:显示符合条件的行;
sed ‘/^\//p’ /etc/fatab
#显示以/开头的行, ‘\’ 转义字符;p命令显示后,模式空间还存在所显示的内容,所以会显示两次;
a \string:指定的行后追加新行,内容为string;
a和\之间有空格,\n用于换行
eg:sed ‘/^\//a \#hello world.’ /etc/fatab #将#hello world.添加到以/开头的行的下一行
i \string:指定的行前面追加新行,内容为string;
eg:sed ‘/^\//i \#hello world.’ /etc/fatab #将#hello world.添加到以/开头的行的上一行
r FILE:将指定的文件内容添加至符合条件的行处
eg:grep ‘2r /etc/issue’ /etc/fstab #将/etc/issue的内容添加到/etc/fstab第二行后面
eg:grep ‘1,4r /etc/issue’ /etc/fstab #将/etc/issue的内容分别添加到/etc/fstab第1.2.3.4行后面
w FILE:将地址指定范围内的内容(行)另存至指定的文件
eg:sed ‘/oot/w /tmp/oot.txt’ /etc/fstab #将/etc/fstab中含有oot的行存储至/tmp/oot.txt文件
s/pattern/string/修饰符:将符合pattern的内容替换为string字符串,默认替换每行中第一次被模式匹配到的字符串
修饰符g:全局替换
修饰符i:忽略字符大小写
eg:sed ‘s/oot/OOT/’ /etc/fstab #将/etc/fstab 中oot换为OOT
string支持后向引用,&:引用模式定义的内容
s/l…e/&r/g:将l…e加个r
不仅仅可以使用s///还可以使用s###,s@@@等做分隔符