sed-运用二
1.d:删除
(1)常用:
1.sed -n '3d;p' 123.txt #删除第三行
2.[root@test1 ~]# sed -n '2,4d;p' 123.txt #删除二到四行,再打印剩余内容。
3.[root@test1 ~]# sed -n '4,$d;p' 123.txt #删除4到最后一行
4. [root@test1 ~]# sed -n '4,6!d;p' 123.txt #除了4-6行全部删除
(2)匹配字符串删除:
1.[root@test1 ~]# sed '/ll/d' 123.txt #包含ll的行删除
2.[root@test1 ~]# sed '/one/,/five/d' 123.txt #包含one到包含five及他们中间的行删除。
2.替换:进行文件内容替换。
(1)常用选项:
选项 | 作用 |
---|---|
s | 替换字符串 |
c | 整行替换 |
y | 字符替换,替换前后的字符长度必须一致 |
(2)实操:
- 字符替换:
1.[root@test1 ~]# sed -n 's/root/test/p' /etc/passwd #每行出现的第一个进行替换。
2.head -n 2 /etc/passwd | sed -n 's/root/test/2p' #把每行出现的第二个root进行替换。
3.head -n 2 /etc/passwd | sed -n 's/root/test/gp' #全量替换
4.sed -n '/^root/ s/^/#/p' /etc/passwd #指定root开头的行,加"#"注释。
5. [root@test1 ~]# sed -n 's/[a-z]/\U&/gp' 123.txt #文件中所有小写字母替换成大写字母。
6.[root@test1 ~]# sed 's/[A-Z]/\l&/gp' 123.txt #文件中所有大写字母替换成小写字母。
7.[root@test1 ~]# sed 's/[a-z]/\u&/' 123.txt #将文件中所有首字母替换成大写字母。
-
整行替换:
[root@test1 ~]# sed '/one/c billkin' 123.txt #整行替换
-
单字符替换:
[root@test1 ~]# sed 'y/o/k/' test.txt #将文本中的o替换成k
3.添加:
(1)常用选项:
选项 | 作用 |
---|---|
a | 在下一行添加内容 |
i | 在当前内容的上一行添加内容 |
r | 在行后添加内容 |
(2)实操:
1.[root@test1 ~]# sed '/three/a bkpp' 123.txt #在选定行的下一行添加指定内容。
2.[root@test1 ~]# sed '/three/i bkpp' 123.txt #在选定行的上一行添加指定内容。
3.[root@test1 ~]# sed '$i bkpp' 123.txt #在最后一行和上一行中间添加内容。
4.[root@test1 ~]# sed '$a bkpp' 123.txt #在最后一行后面添加内容。
4.分组及位置替换:
(1)分组替换:
1. [root@test1 ~]# echo billkinpp | sed -r 's/(billkin)(pp)/\2\1/' #位置替换,前后替换
2.[root@test1 ~]# echo billkinppwang | sed -r 's/(billkin)(pp)(wang)/\2\3\1/' #位置替换
3.echo 马群耀林祎凯 | sed -r 's/(.)(.)(.)(.)(.)(.)/\6\5\4\3\2\1/'
(2)扩展:
1.将文件1中的内容替换成文件2:
2.将文件1中的空格替换成#:
5.补充:
(1)只保留所需出版号:
[root@test1 ~]# cat test1.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'
(2)查看指定日期内的日志文件:
[root@test1 ~]# sed -n '/Jun 6 15:51:28/,/Jun 6 15:57:01/p' /var/log/messages