9.4 sed(上)

1. 创建目录 :              

[root@hao-01 ~]# mkdir sed

2. 进入目录 :                  

[root@hao-01 ~]# cd sed

3. 拷贝/etc/passwd到当前目录,并重命名 :

[root@hao-01 sed]# cp /etc/passwd   test.txt

匹配指定行:

1. 匹配 含有关键词(root)

sed -n '/关键词/'p 文件名

[root@hao-01 sed]# sed -n '/root/'p test.txt

9.4 sed(上);9.5 sed(下)_sed_02

2. 匹配 关键词.关键词(点,一个任意字符)的行 :

sed -n '/关键词.关键词/'p 文件名

[root@hao-01 sed]# sed -n '/r.t/'p test.txt

9.4 sed(上);9.5 sed(下)_sed_04

3. 匹配 *星号右边关键词的行,全部打印出来:

sed -n '/任意关键词*关键词/'p 文件名

[root@hao-01 sed]# sed -n '/r*t/'p test.txt

9.4 sed(上);9.5 sed(下)_sed_06

4. 匹配 关键词+关键词(ot组合);sed -nr 作用于 +加号 :

sed -nr '/关键词+关键词/'p 文件名

[root@hao-01 sed]# sed -nr '/o+t/'p test.txt

9.4 sed(上);9.5 sed(下)_sed_08

5. 匹配 关键词任意次(n次) :

sed -nr '/关键词{匹配次数}/'p 文件名

[root@hao-01 sed]# sed -nr '/o{2}/'p test.txt

9.4 sed(上);9.5 sed(下)_sed_10

6. 匹配 关键词1或者匹配关键词2或者匹配关键词3

sed -nr '/关键词1|关键词2|关键词3/'p 文件名

[root@hao-01 sed]# sed -nr '/root|hao|sbin/'p test.txt

9.4 sed(上);9.5 sed(下)_sed_11

打印指定行:

7. 打印 指定行

sed -nr '指定行'p 文件名

[root@hao-01 sed]# sed -nr '2'p test.txt

9.4 sed(上);9.5 sed(下)_sed_13

8. 打印 指定范围行

sed -nr '指定范围行'p 文件名

[root@hao-01 sed]# sed -nr '2,5'p test.txt

9.4 sed(上);9.5 sed(下)_sed_15

9. 打印指定行末行($):

sed -nr '指定行,$'p 文件名

[root@hao-01 sed]# sed -nr '2,$'p test.txt

9.4 sed(上);9.5 sed(下)_sed_17

10. 打印全部行(第一行到末行):

sed -nr '1,$'p 文件名

[root@hao-01 sed]# sed -nr '1,$'p test.txt

11. 打印指定行,还可以匹配包含关键词1的行和匹配包含关键词2的行 :

sed -e '指定行'p -e '/匹配关键词1/'p -e '/匹配关键词2/'p -n 文件名

[root@hao-01 sed]# sed -e '1'p -e '/111/'p -e '/hao/'p -n test.txt

9.4 sed(上);9.5 sed(下)_sed_18

9.5 sed(下)

1. 匹配 含有关键词(root)行,但不区分大小写:

sed -n '/关键词/'Ip 文件名

[root@hao-01 sed]# sed -n '/root/'Ip test.txt

9.4 sed(上);9.5 sed(下)_sed_20

2. 不匹配 指定的范围行,其余行打印到屏幕(只限于生效在屏幕) :

sed '范围行'd test.txt

[root@hao-01 sed]#sed '1,10'd test.txt

9.4 sed(上);9.5 sed(下)_sed_22

3. 删除 文件中指定的范围行(生效在文件):

sed -i '范围行'd test.txt

[root@hao-01 sed]# sed -i '1,10'd test.txt

查看文件行数:wc -l 文件名

[root@hao-01 sed]# wc -l test.txt

9.4 sed(上);9.5 sed(下)_sed_24

4. 删除 文件中含有关键词的行(生效在文件):

sed -i '/关键词/'d 文件名

[root@hao-01 sed]# sed -i '/hao/'d test.txt

9.4 sed(上);9.5 sed(下)_sed_26

5. 查找指定行,并全局替换 打印到屏幕:

sed '指定范围行s/关键词/替换关键词/g' test.txt

[root@hao-01 sed]# sed '1,10s/hao/root/g' test.txt

9.4 sed(上);9.5 sed(下)_sed_27

head 默认是输出文件内容的前十行!!!

6. 查找指定范围行,并用正则表达式+号进行了全局替换  后面可以用管道符 :

[root@hao-01 sed]# sed -r '1,10s/ro+/r/g' test.txt |head

7. 把前面命令的输出结果, 管道符丢给sed命令,以冒号分隔为一段,每行的第一段最后一段相互替换

[root@hao-01 sed]# head test.txt |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:1/'

9.4 sed(上);9.5 sed(下)_sed_28

8. head 输出文件前十行,sed 查找关键词1 替换 关键词2

(默认命令用法中分隔符/,可以用@#代替都OK啦)

把关键词:/sbin/nologin  替换成 123 ,因为被替换关键词有/斜杠,就用@为命令分隔符了

[root@hao-01 sed]# head test.txt |sed 's@/sbin/nologin@123@g'

9.4 sed(上);9.5 sed(下)_sed_29

9. 前十行替换, 字母范围为空

head 文件名 |sed 's/[小写大写字母范围]//g'

[root@hao-01 sed]# head test.txt |sed 's/[a-zA-Z]//g'

9.4 sed(上);9.5 sed(下)_sed_309.4 sed(上);9.5 sed(下)_sed_31

10. 所有行行首添加固定的字符串

head 文件名 |sed -r 's/(.*)/添加的字符串:&/'

[root@hao-01 sed]# head test.txt |sed -r 's/(.*)/hhh:&/'

9.4 sed(上);9.5 sed(下)_sed_309.4 sed(上);9.5 sed(下)_sed_33