sed命令详解

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'


你可能感兴趣的:(Stream,command,File,表达式,编辑器)