sed流编辑器:
stream Editor
行编辑器 (全屏编辑器:vi)
sed:模式空间
默认情况下不编辑原文件
sed ‘AddressCommand’ file 。。。
-n:静默模式,不再显示模式空间中的内容
-i: 直接修改原文件
-e SCRIPT -e SCRIPT:同时执行多个执行脚本
-f 逐行读取文件中的脚本
使用正则:history |sed 's#^[[:space:]]*##g'
1、startLine,EendLine
比如1,100
2、/RegExp正则表达式/
3、/Pattern1/,/pattern2/
第一次被模式一匹配到的行开始,至第一次被pattern2匹配到的行结束
4、LineNumber
指定的行
$:最后一行
5、startLine,+N
从startline开始,向后N行;
command
d:删除指定的行
p:打印 显示符合条件的行
a \"string":在指定的行后追加新行,其内容为“string” sed '/^#/a \#linux' /etc/fstab
i \"string":在指定的行前面添加新行,其内容为“string” sed '/^#/i \#linux' /etc/fstab
r FILENAME:将指定的文件的内容添加至符合条件的行处
w FILENAME:将指定范围内的内容另存至指定的文件夹中
s/pattern/string/g:查找并替换,默认只替换每一行中第一次被模式匹配到的字符串 sed 's/^\//#/' /etc/fstab
加修饰符
g:全局替换
i:忽略字符大小写
s///,s###,s@@@
\(\), \1, \2 后向引用 sed ‘s#\(l..e)#\1r#g’ sed.txt
&在后面添加:sed 's#l..e#&r#g' sed.txt
前面添加: sed 's#l..e#r&#g' sed.txt
sed练习:
1、删除/etc/grub.conf文件中首行的空白符
sed -r 's@^[[:space:]]+@@g' /etc/grub.conf
2、删除/etc/initab文件中开头的#号
sed 's@^#@@g' /etc/inittab
3、删除某文件中开头的#号及后面的空白字符,但要求#号的后面必须
有空白字符;
sed -r 's@^[[:space:]]+@@g' /etc/inittab
4、删除/etc/initab文件中开头的空白行
sed '/^$/d' /etc/inittab
5、删除某文件中以及空白字符后面跟#类的行中的开头的空白字符及#
sed -r 's@^[[:space:]]+#@@g' /etc/inittab
6、取出一个文件路径的目录名称;
echo "/etc/rc.d" |sed -r 's@^(/.*)[^/]+/?@\1@g'
7、替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5;
sed 's@\(id:\)[0-9]\(:initdefault:\)@15\2@g' /etc/inittab