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
2. 匹配 关键词.关键词(点,一个任意字符)的行 :
sed -n '/关键词.关键词/'p 文件名
[root@hao-01 sed]# sed -n '/r.t/'p test.txt
3. 匹配 *星号右边关键词的行,全部打印出来:
sed -n '/任意关键词*关键词/'p 文件名
[root@hao-01 sed]# sed -n '/r*t/'p test.txt
4. 匹配 关键词+关键词(ot组合);sed -nr 作用于 +加号 :
sed -nr '/关键词+关键词/'p 文件名
[root@hao-01 sed]# sed -nr '/o+t/'p test.txt
5. 匹配 关键词任意次(n次) :
sed -nr '/关键词{匹配次数}/'p 文件名
[root@hao-01 sed]# sed -nr '/o{2}/'p test.txt
6. 匹配 关键词1或者匹配关键词2或者匹配关键词3 :
sed -nr '/关键词1|关键词2|关键词3/'p 文件名
[root@hao-01 sed]# sed -nr '/root|hao|sbin/'p test.txt
打印指定行:
7. 打印 指定行:
sed -nr '指定行'p 文件名
[root@hao-01 sed]# sed -nr '2'p test.txt
8. 打印 指定范围行:
sed -nr '指定范围行'p 文件名
[root@hao-01 sed]# sed -nr '2,5'p test.txt
9. 打印指定行到末行($):
sed -nr '指定行,$'p 文件名
[root@hao-01 sed]# sed -nr '2,$'p test.txt
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.5 sed(下)
1. 匹配 含有关键词(root)行,但不区分大小写:
sed -n '/关键词/'Ip 文件名
[root@hao-01 sed]# sed -n '/root/'Ip test.txt
2. 不匹配 指定的范围行,其余行打印到屏幕(只限于生效在屏幕) :
sed '范围行'd test.txt
[root@hao-01 sed]#sed '1,10'd test.txt
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
4. 删除 文件中含有关键词的行(生效在文件):
sed -i '/关键词/'d 文件名
[root@hao-01 sed]# sed -i '/hao/'d test.txt
5. 查找指定行,并全局替换 打印到屏幕:
sed '指定范围行s/关键词/替换关键词/g' test.txt
[root@hao-01 sed]# sed '1,10s/hao/root/g' test.txt
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/'
8. head 输出文件前十行,sed 查找关键词1 替换 关键词2 :
(默认命令用法中分隔符/,可以用@或#代替都OK啦)
把关键词:/sbin/nologin 替换成 123 ,因为被替换关键词有/斜杠,就用@为命令分隔符了
[root@hao-01 sed]# head test.txt |sed 's@/sbin/nologin@123@g'
9. 前十行替换, 字母范围为空 :
head 文件名 |sed 's/[小写大写字母范围]//g'
[root@hao-01 sed]# head test.txt |sed 's/[a-zA-Z]//g'
10. 所有行行首,添加固定的字符串:
head 文件名 |sed -r 's/(.*)/添加的字符串:&/'
[root@hao-01 sed]# head test.txt |sed -r 's/(.*)/hhh:&/'