sed练习
1:删除/etc/grub.conf文件中行首的空白符;
sed -r ‘s@^[[:space:]]+@@g' /etc/grub.conf
2:替换/etc/inittab文件中“id:3:initdaefault:”一行中的数字为5
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
3:删除/etc/inittab文件中的空白行字符
sed '/^$/d' /etc/inittab
sed -r 's@^#[[:space:]]+@@g' /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'
9:递归替换
sed -i 's/abc/bcd/g' `grep "abc" -rl /usr/local/src/zhangys/`
以下是
sed 基本用法
行编辑器(全屏编辑器:vi、)
模式空间:默认不编辑源文件,仅对末世空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕 。
sed 【options】选项 address地址commond命令 file。。。文件
-n:静默模式不再默认显示模式空间中的内容
-i:可以直接修改原文件
-e:-e脚本-e脚本可以执行多个脚本
-r:表示使用扩展正则表达式
Address:
1> StartLine, EndLine
比如1,100 从第1行到100行
$: 最后一行
$-1:倒数第二行
2> /RegExp/
/^root/找这个文件中所有以root字符串开头的行
例:sed ‘/root/d’ /etc/fstab 删除文件中所有的root
3> /pattern1/,/pattern2/
第1次被模式1匹配到的行开始,至第1次被模式2匹配到的行结束
4> LineNumber
指定的行
5> StartLine,+N
从StarLine开始,向后的N行
例:sed ‘1,+2d’ /etc/fstab删除3行
Command:
d:删除符合条件的行;
例:sed ‘1,2d’ /etc/fstab删除前两行
p:显示符合条件的行
例:sed‘/^\//d’ /etc/fstab删除以斜线开头的行
sed -n '/^\//p' /etc/fstab 显示以斜杠开头的行
a \string:在指定的行后面追加新行,内容为“string”
例:sed ‘/^\//a \// hello world’/etc/fstab
i \string:在指定的行前面追加新行,内容为“string”
r FILE:用于合并文件
sed ‘2r /etc/issue’ /etc/fstab
将文件issue里的内容粘贴到fstab的第二行
w FILE:将指定范围内的内容另存至指定的文件中
例:sed -n‘/oot/w /tmp/oot.txt' /etc/fstab
-n的作用 禁止打印模式空间的内容
s/pattern模式/string字符串/:查找并替换
g:全局替换
i:忽略字符大小写
例:sed‘s/oot/OOT/’/etc/fstab
例:sed ‘s/^\//#/' /etc/fstab将行首斜线替换成井号
例:sed 's/\//#/' /etc/fstab替换每一行第一次被模式匹配到的串
例:sed 's/\//#/g' /etc/fstab 全局替换成没有
i:查找时忽略大小写
例:sed 's#\(l..e\)#\1r#e' sed.txt将所有l开头e结尾的字符创后面加上r
例:sed ‘s#\(l..e\)#\1r#g’ sed.txt 在like love 后面加r
等同于 sed ‘s#l..e#&r#g’ sed.txt
练习:
1取出一个文件路径的父目录名称 如/etc
echo "/etc/rc.d" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
保留其子目录名
echo "/etc/rc.d" | sed -r 's@^/.*/([^/]+)/?@\1@g'
2删除/etc/greb.conf文件中行首的空白符
sed '/^$/d' /etc/inittab
3替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5;
4删除/etc/inittab文件中开头的#号(井号后面必须有空白字符)
sed 's@^#@@g' /etc/inittab
5删除/etc/inittab文件中的空白行
6删除某文件中以空白符后面跟了#类的行中,删除其开头的空白字符及#