1.简介
是模式空间,sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。
选项 功能 -e 进行多项编辑,即对输入行应用多条sed命令时使用 -n 取消默认的输出 -f 指定sed脚本的文件名
d: 删除符合条件的行;sed '1,2d' /etc/xx ;
命令 功能 a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行 i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行 d 删除行 h 把模式空间里的内容复制到暂存缓冲区 H 把模式空间里的内容追加到暂存缓冲区 g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容 G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面 l 列出非打印字符 p 打印行 n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理 q 结束或退出sed r 从文件中读取输入行 ! 对所选行以外的所有行应用命令 s 用一个字符串替换另一个 g 在行内进行全局替换 w 将所选的行写入文件 x 交换暂存缓冲区与模式空间的内容 y 将字符替换为另一字符(不能对正则表达式使用y命令)
p: 显示符合条件的行;
a \"string": 在指定的行后面追加新行,内容为string
\n:可以用于换行
>:sed '/^\//a \# hello word' /fstab2
i \string: 在指定的行前面添加新行,内容为string
r FILE: 将指定的文件的内容添加至符合条件的行处
>:sed '1r etc/issue' /etc/fstab
w FILE: 将地址指定的范围内的行另存至指定的文件中;
>:sed '/oot/w /tmpoot.txt' /etc/fstab
s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
>: sed 's/^\//#/' /fstab2 (第一行为'/' 替换成'#')
加修饰符
g: 全局替换
i: 忽略字符大小写
s///: s###, s@@@
或 sed 's@/@#@g' /fstab2
\(\), \1, \2
l..e: like-->liker
love-->lover
>:sed 's#1..e#&r#g' sed.txt 或 sed 's#\(1..e\)#\1r#g' sed.txt
like-->Like
love-->Love
>:sed 's#l\(..e\)#L#g' sed.txt
&: 引用模式匹配整个串
3.sed练习:
1、删除/etc/grub.conf文件中行首的空白符;
sed -r 's@^[[:spapce:]]+@@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'
基名:
echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g'