sed基本用法
sed:(stream editor)流编辑器
行编辑器(全行编辑器:vi),每次读一行
sed模式空间
默认不编辑原文件,仅对模式空间中的数据进行处理;而后,处理结束后,将模式空间打印至屏幕
sed [options] 'AddressCommand 'file,...
-n :静默模式(不显示模式空间中的内容,只跟命令有关)
-i:直接修改原文件、很危险
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /path/to/script file:
-r:表示使用扩展正则表达式
Address:
1,StartLine,EndLine
比如1,100(1到100行)
$:最后一行
$-1:倒数第二行
2,/RegExp/(正则表达式)
如:/^root/
3、/pattern1/,/pattern2/ 第一次被pattern1匹配的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行
4、LineNumber 指定的行
5、StartLine,+N
从startLine开始,向后的N行(总共N+1行)
command:
d:删除符合条件的行 #sed '1,2d' /etc/fstab
p:显示符合条件的行 # sed -n '/^s/p' /etc/fstab
a \string:在指定的行后面追加新行,内容为string
\n可以换行
sed -n '/^s/a \hello world\nhello linex' /etc/fstab
i \string 在指定的行前面追加新行,内容为string
r file:将指定的文件的内容添加至符合条件的行处,可以合并文件
# sed '2r /etc/issue' /etc/fstab
w file:将指定范围内的内容另存至指定的文件中;
s /pattern/string/(修饰符): 查找并替换,每一行能被pattern匹配的替换为string,默认”每行第一次“被匹配到的字符串,加修饰符g:全局替换,i:查找时忽略字符大小写
#sed 's/oot/OOT/' /etc/fstab -n
like->liker:sed 's/(l..e)/\1r/g' sed.txt # \1 反向引用
&:引用模式匹配到的整个字符串
(s /pattern/string/ 可以替换 s @ @ @ 或其他符号)
sed练习:
1、删除/etc/grub.conf文件中行首的空白符
sed -r 's@^[[:space:]] +@@g' /etc/grub.conf
2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
3、删除/etc/inittab文件中的空白行
sed '/^$/d' /etc/inittab
4、删除/etc/inittab文件中开头的#号
sed 's@^#@@g' /etc/inittab
5、删除某文件中开头的#号以及后面的空白字符,但要求#号后面必须有空白字符
sed -r 's@^[[:space:]]+@@g' /etc/inittab
6、删除某文件中以空白字符开头后面跟#类的行中的开头的空白字符及#
sed -r 's@^[[:space:]]+#@@g' /etc/inittab
7、取出一个文件路径的目录名称
echo "/etc/rc.d" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
8、取出一个文件的文件基名:
echo "/etc/rc.d" | sed -r 's@^/.*/([^/]+)/?@\1@g'