菜鸟学Linux 第017篇笔记 sed命令的使用





三大文本处理工具:

grep (print lines matching a pattern)

sed (Stream EDitor for filtering and transforming text)

awk (pattern scanning and processing language)



sed: Stream EDitor

行编辑器 (全屏编辑器:vi)


sed模式空间


sed保留空间(高级功能)


sed默认不编辑原文件,仅对模式空间中的数据做处理。

而后将处理结束后,将模式空间打印到屏幕。


使用格式

sed [options] 'AddressCommand' file1 file2 ...\

Options

-n 不打印模式空间

-i 直接修改原文件

-e script 可以同时执行多个AddressCommand

-f /path/file  

-r 表示使用扩展正则表达式

Address:

1. StartLine,EndLine

e.g. 1,100

$:最后一行

sed "1,2d" /etc/fstab 

2. /RegExp/ pattern  正则表达式

e.g. /^root/

sed "/oot/d" /etc/fstab

3. /pattern1/,/pattern2/  

表示第一次被pattern1匹配到的行,至第二次被pattern2匹配到的中间行。

4. LineNumber

指定的行

5. StartLine,+N 

从指定的行开始,向后的N行 一共N+1行

sed '1,+2d' /etc/fstab 

Command:

d 表示删除符合条件的行;

p 显示匹配到的行

a \stirng; 在指定的行后面追加新行,内容为string 加多行\n表示换行

i \stirng; 在指定的行前面追加新行,内容为string 加多行\n表示换行

r FILE Append text read from filename.

w FILE Write the current pattern space to filename.

s/patter/string/ 查找并替换,默认只替换每行中第一次

被模式匹配到的字符串

s%%% s### s@@@

加修饰符

g 全局替换

i 忽略字符大小写

&表示后向引用

小练习:

1、删除/etc/grub.conf文件中行首的空白符;

2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;

3、删除/etc/inittab文件中的空白行;

4、删除/etc/inittab文件中开头的#号;

5、删除某文件中开头的#号以及后面的空白字符,

但要求#号后面必须有空白字符才可删除;

6、删除某文件中以空白字符后面跟#类开头的空白字符和#;

7、取出一个文件路径的目录名称;(待定,小的做不到,后期学习后再做)

key:

1. sed 's/^[[:space:]]//' /etc/grub.conf 

2. sed '$s/[[:digit:]]/5/' /etc/inittab

3. sed '/^$/d' /etc/inittab 

4. sed 's/#//' /etc/inittab 

5. sed -r 's/^#[[:space:]]+//' match.txt 

6. sed -r 's/^[[:space:]]+#//' match.txt

7. 未研究出来!!!