菜鸟学Linux 第017篇笔记 sed命令的使用
三大文本处理工具:
grep (print lines matching a pattern)
sed (Stream EDitor for filtering and transforming text)
awk (pattern scanning and processing language)
sed: Stream EDitor
行编辑器 (全屏编辑器:vi)
sed模式空间
sed保留空间(高级功能)
sed默认不编辑原文件,仅对模式空间中的数据做处理。
而后将处理结束后,将模式空间打印到屏幕。
使用格式:
sed [options] 'AddressCommand' file1 file2 ...\
Options
-n 不打印模式空间
-i 直接修改原文件
-e script 可以同时执行多个AddressCommand
-f /path/file
-r 表示使用扩展正则表达式
Address:
1. StartLine,EndLine
e.g. 1,100
$:最后一行
sed "1,2d" /etc/fstab
2. /RegExp/ pattern 正则表达式
e.g. /^root/
sed "/oot/d" /etc/fstab
3. /pattern1/,/pattern2/
表示第一次被pattern1匹配到的行,至第二次被pattern2匹配到的中间行。
4. LineNumber
指定的行
5. StartLine,+N
从指定的行开始,向后的N行 一共N+1行
sed '1,+2d' /etc/fstab
Command:
d 表示删除符合条件的行;
p 显示匹配到的行
a \stirng; 在指定的行后面追加新行,内容为string 加多行\n表示换行
i \stirng; 在指定的行前面追加新行,内容为string 加多行\n表示换行
r FILE Append text read from filename.
w FILE Write the current pattern space to filename.
s/patter/string/ 查找并替换,默认只替换每行中第一次
被模式匹配到的字符串
s%%% s### s@@@
加修饰符
g 全局替换
i 忽略字符大小写
&表示后向引用
小练习:
1、删除/etc/grub.conf文件中行首的空白符;
2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;
3、删除/etc/inittab文件中的空白行;
4、删除/etc/inittab文件中开头的#号;
5、删除某文件中开头的#号以及后面的空白字符,
但要求#号后面必须有空白字符才可删除;
6、删除某文件中以空白字符后面跟#类开头的空白字符和#;
7、取出一个文件路径的目录名称;(待定,小的做不到,后期学习后再做)
key:
1. sed 's/^[[:space:]]//' /etc/grub.conf
2. sed '$s/[[:digit:]]/5/' /etc/inittab
3. sed '/^$/d' /etc/inittab
4. sed 's/#//' /etc/inittab
5. sed -r 's/^#[[:space:]]+//' match.txt
6. sed -r 's/^[[:space:]]+#//' match.txt
7. 未研究出来!!!