博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux Sed命令具体解释+怎样替换换行符"\n"(非常多面试问道)
阅读量:6092 次
发布时间:2019-06-20

本文共 2755 字,大约阅读时间需要 9 分钟。

Sed
Sed是一个强大的文本处理工具
能够採用正则匹配。对文本进行插入删除改动等操作
Sed处理的时候,一次处理一行,每一次把当前处理的存放在暂时缓冲区。处理完后输出缓冲区内容到屏幕,然后把下一行读入缓冲区,如此反复,直到结尾。

1、命令格式和參数
sed [-nefr] [动作] 文件
參数:
-n 安静模式。在sed处理的时候。全部来自STDIN的数据都会被输出到终端。加上-n会仅仅输出处理的哪行
-e 直接在命令列上进行sed动作编辑
-f 直接将sed的动作写在文件内
-r sed动作支持延伸的正则表达(默认仅仅是基础正则)
-i 直接改动文件内容(慎用,尤其是用系统文件做练习的时候)
动作:
a append:添加。在当前行的下一行添加
c   :代替,代替n1到n2之间的行
d delete:删除
i 插入,眼下行的上一行插入
p 打印。经常与-n使用
s 代替,s/old/new/g
2、基础使用方法具体解释
(1)第一行之后加入一行

[root@localhost ~]# nl file.txt | sed "1a add text"     1  wtmp begins Mon Feb 24 14:26:08 2014add text     2  192.168.0.1     3  162.12.0.123     4  this is the last line
(2)第一行之前加入一行
[root@localhost ~]# nl file.txt | sed "1i add text"add text     1  wtmp begins Mon Feb 24 14:26:08 2014     2  192.168.0.1     3  162.12.0.123     4  this is the last line
(3)删除第2,3行
[root@localhost ~]# nl file.txt | sed "2,3d"     1  wtmp begins Mon Feb 24 14:26:08 2014     4  this is the last line
(4)打印第2,3行
[root@localhost ~]# sed -n "2,3p" file.txt 192.168.0.1162.12.0.123
这里要提到的是,尽量使用-n。不然会出现这种结果
[root@localhost ~]# sed "2,3p" file.txt wtmp begins Mon Feb 24 14:26:08 2014192.168.0.1192.168.0.1162.12.0.123162.12.0.123this is the last line
(5)把168换成169
先看源文件
[root@localhost ~]# cat file.txt wtmp begins Mon Feb 24 14:26:08 2014192.168.0.1162.12.0.123this is the last line
处理后
[root@localhost ~]# sed "s/168/169/g" file.txt wtmp begins Mon Feb 24 14:26:08 2014192.169.0.1162.12.0.123this is the last line
(6)插入多行
[root@localhost ~]# nl file.txt | sed "2afirst\nsecond" file.txt wtmp begins Mon Feb 24 14:26:08 2014192.168.0.1firstsecond162.12.0.123this is the last line
(7)匹配数据,然后进行操作
仅仅须要在上述的基础上加上正则匹配
sed "/匹配的模式/处理的方式" file.txt 
sed "/^root/d" file.txt 对開始有root的删除
比如
匹配begin,并删除改行
[root@localhost ~]# nl file.txt | sed "/begin/d"     2  192.168.0.1     3  162.12.0.123     4  this is the last line
匹配123,而且把含有123的行162都替换成172
[root@localhost ~]# nl file.txt | sed "/123/{s/162/172/g;q}"     1  wtmp begins Mon Feb 24 14:26:08 2014     2  192.168.0.1     3  172.12.0.123     4  this is the last line
这里大括号{}里能够运行多个命令,用;隔开就可以,q是退出
(8)连续编辑 -e
删除第二行,而且匹配把last替换成new
[root@localhost ~]# nl file.txt | sed -e "2d" -e "s/last/new/"     1  wtmp begins Mon Feb 24 14:26:08 2014     3  162.12.0.123     4  this is the new line
 
(9)直接改动文件,切记不要改动系统文件
[root@localhost ~]# sed -i "/begin/{s/24/25/g}" file.txt [root@localhost ~]# cat file.txt wtmp begins Mon Feb 25 14:26:08 2014192.168.0.1162.12.0.123this is the last line
三 、一个比較有趣的样例
怎样替换\n也就是把全部的行都归为一行
第一种方式
[root@localhost ~]# sed ':a;N;$!ba;s/\n/ /g' file.txt wtmp begins Mon Feb 25 14:26:08 2014 192.168.0.1 162.12.0.123 this is the last line

另外一种方式

[root@localhost ~]# tr "\n" " " < file.txt wtmp begins Mon Feb 25 14:26:08 2014 192.168.0.1 162.12.0.123 this is the last line last linen

转载地址:http://wfmwa.baihongyu.com/

你可能感兴趣的文章
GlusterFS安装配置
查看>>
log4j.properties配置详解(转载)
查看>>
css3常见的动画
查看>>
ubuntu16.04 改usb键盘的keycode.md
查看>>
flex组件拖拽
查看>>
python统计通过暴力破解尝试登陆本机的ip和次数
查看>>
linux下查看所有用户及所有用户组
查看>>
2012:Android关键而危险的“升级”之年
查看>>
HttpSessionListener接口监听网站在线人数
查看>>
spring事务属性的几个试验
查看>>
C#基础知识整理:C#基础(2)
查看>>
jQuery中attr和prop的区别
查看>>
Differences between Hub, Network Bridge, Switch and Router
查看>>
redmine如何添加qq邮箱功能
查看>>
Tsung参数说明【转载】
查看>>
solr学习(一)_solr4.2.0在tomcat6.0+win7上的部署
查看>>
redis sort
查看>>
iptables详解
查看>>
C语言学习笔记(五) 预处理符号
查看>>
SVN cleanup操作反复失败解决办法
查看>>