linux之sed的常用操作
Sed命令:
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出或者加上 -i 参数(此时处理结果不会发送值屏幕).
sed 命令格式
sed [options] 'command' file
sed [options] -f scriptfile file
sed 用法实例
1.匹配模式的其它正则用法
sed-n '/r*t/p'/etc/passwd#打印匹配r有0个或者多个,后接一个t字符的行
sed -n '/.*r.*/p'/etc/passwd#打印匹配有r的行并且r后面跟任意字符
sed -n '/^r.*/p'/etc/passwd#打印匹配以r开头的行并且r后面跟任意字符
sed -n '/r$/p' /etc/passwd#打印匹配以结尾的
sed -n '/o*/p'/etc/passwd#打印o字符重复任意次(含0),并没什么意义
sed -n '/o\{4\}/p'/etc/passwd#打印o字重复出现4次
sed -n '/o\{1,\}/p'/etc/passwd#打印o字重复出现一次以上
sed -n '/o\{1,3\}/p'/etc/passwd#打印o字重复出现一次到三次之间以上
2.替换操作: s命令
root@localhost:/home/wee/Desktop/linux#>cat root@localhost:/home/wee/Desktop/linux#>sed 's/11/newline1/'
newline1 root@localhost:/home/wee/Desktop/linux#>cat root@localhost:/home/wee/Desktop/linux#>sed -i 's/11/newline1/'
root@localhost:/home/wee/Desktop/linux#>cat
newline1
想要替换每一行中的所有匹配,在最后加g,如果想从第N次匹处开始替换所有使用Ng,只替换第N处使用N
wee@localhost:~/Desktop/linux$>cat wee@localhost:~/Desktop/linux$>sed 's/11/secondmatch/'
secondmatch wee@localhost:~/Desktop/linux$>sed 's/11/secondmatch/2'
secondmatch wee@localhost:~/Desktop/linux$>sed 's/11/secondmatch/3'
secondmatch wee@localhost:~/Desktop/linux$>sed 's/11/secondmatch/2g'
secondmatch secondmatch wee@localhost:~/Desktop/linux$>sed 's/11/secondmatch/g'
secondmatch secondmatch secondmatch
如上只是把替换结果输出到了屏幕文件内容并未变化,如果要文件保存更改使用 -i
wee@localhost:~/Desktop/linux$>sed -i 's/11/newline/g'
wee@localhost:~/Desktop/linux$>cat
newline newline newline
上述命令中字符"/ "在sed中作为定界符使用,也可以使用其它的定界符(":" "|"等)
wee@localhost:~/Desktop/linux$>sed 's:11:secondmatch:g'
secondmatch secondmatch secondmatch wee@localhost:~/Desktop/linux$>sed 's|11|secondmatch|g'
secondmatch secondmatch secondmatch
定界符出现在样式内部时,需要进行转义,否则报错
wee@localhost:~/Desktop/linux$>cat
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
uucp:x:::uucp:/var/spool/uucp:/sbin/nologin
wee@localhost:~/Desktop/linux$>sed 's:/:\:g'
sed: -e expression #1, char 7: unterminated `s' command wee@localhost:~/Desktop/linux$>sed 's:\/:r:g'
root:x:::root:rroot:rbinrbash
bin:x:::bin:rbin:rsbinrnologin
daemon:x:::daemon:rsbin:rsbinrnologin
adm:x:::adm:rvarradm:rsbinrnologin
lp:x:::lp:rvarrspoolrlpd:rsbinrnologin
sync:x:::sync:rsbin:rbinrsync
shutdown:x:::shutdown:rsbin:rsbinrshutdown
halt:x:::halt:rsbin:rsbinrhalt
mail:x:::mail:rvarrspoolrmail:rsbinrnologin
有些时候一个文件中可能有大部分没有用的内容,我们只想提取或者替换有限行我们可以使用 -n和p的结合
wee@localhost:~/Desktop/linux$>cat
no usey
no use
no use
useful
no use
no usey
no use
no use
useful
no use
useful
useful
wee@localhost:~/Desktop/linux$>sed -n '/useful/p'
useful
useful
useful
useful
wee@localhost:~/Desktop/linux$>sed -n 's/useful/userfulline/p'
userfulline
userfulline
userfulline
userfulline
wee@localhost:~/Desktop/linux$>sed -i -n 's/useful/userfulline/p'
wee@localhost:~/Desktop/linux$>cat
userfulline
userfulline
userfulline
userfulline
有可能不想对文件进行任何替换操作,只想知道匹配某一字符串的行都在第几行,怎么办?使用 -n和=
wee@localhost:~/Desktop/linux$>cat wee@localhost:~/Desktop/linux$>sed -n '/22/='
打印指定行和行号(=和p用分号隔开)
wee@localhost:~/Desktop/linux$>sed -n '1,4{=;p}' root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin daemon:x:::daemon:/sbin:/sbin/nologin adm:x:::adm:/var/adm:/sbin/nologin
保留打印文件前N行,使用Nq
wee@localhost:~/Desktop/linux$>sed '2q' wee@localhost:~/Desktop/linux$>sed '3q'
从匹配行处打印到第N行,使用-n /pattern/,Np
wee@localhost:~/Desktop/linux$>cat
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
uucp:x:::uucp:/var/spool/uucp:/sbin/nologin
wee@localhost:~/Desktop/linux$>sed -n '/halt/,10p'
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
uucp:x:::uucp:/var/spool/uucp:/sbin/nologin
从第N行处开始打印到匹配行处(第一次匹配)
wee@localhost:~/Desktop/linux$>sed -n '1,/33/p'
打印两次匹配之间所有行
wee@localhost:~/Desktop/linux$>cat
aa
bb
cc
dd
wee@localhost:~/Desktop/linux$>sed -n '/aa/,/cc/p'
aa
bb
cc
打印匹配a有0个或者多个,后接一个t字符的行
wee@localhost:~/Desktop/linux$>cat
aamofsdntt
bb
cc
dd wee@localhost:~/Desktop/linux$>sed -n '/a*t/p'
aamofsdntt
#引用http://www.tuicool.com/articles/3qa67v 的内容
[root@jie1 ~]# sed -i '/DEVICE/c\Ethernet' test #匹配DEVICE的行,替换成Ethernet这行
[root@jie1 ~]# sed -i 's/static/dhcp/' test #把static替换成dhcp(/,@,#都是前面所说的地址定界符)
[root@jie1 ~]# sed -i '/IPADDR/s@22\.1@10.12@' test #匹配IPADDR的行,把22.1替换成10.12由于.号有特殊意义所有需要转义
[root@jie1 ~]# sed -i '/connect/s#YES#NO#' test #匹配connect的行,把YES替换成NO
[root@jie1 ~]# sed -i 's/bin/tom/2g' test #把所有匹配到bin的行中第二次及第二次之后出现bin替换成tom
[root@jie1 ~]# sed -i 's/daemon/jerry/2p' test #把所有匹配到bin的行中第二次出现的daemon替换成jerry,并在生产与匹配行同样的行
[root@jie1 ~]# sed -i 's/adm/boss/2' test #把所有匹配到adm的行中仅仅只是第二次出现的adm替换成boss
[root@jie1 ~]# sed -i '/root/{s/bash/nologin/;s/0/1/g}' test#匹配root的行,把bash替换成nologin,且把0替换成1
[root@jie1 ~]# sed -i 's/root/(&)/g' test #把root用括号括起来,&表示引用前面匹配的字符
[root@jie1 ~]# sed -i 's/BOOTPROTO/#BOOTPROTO/' test #匹配BOOTPROTO替换成#BOOTPROTO,在配置文件中一般用于注释某行
[root@jie1 ~]# sed -i 's/ONBOOT/#&/' test #匹配ONBOOT的行的前面添加#号,在配置文件中也表示注释某行
[root@jie1 ~]# sed -i '/ONBOOT/s/#//' test #匹配ONBOOT的行,把#替换成空,即去掉#号,也一般用作去掉#注释
3.删除操作: d命令
1.删除以某个字符开头的行
wee@pc~$cat
# # wee@pc~$sed '/^#/d'
2.删除命令"d"前加"!"表示取反,例子为删除以非"#"开头的行。。。
wee@pc~$sed '/^#/!d'
#
#
3.删除第N行
wee@pc~$cat
# # wee@pc~$sed '/2/d'
#
#
4.删除最后一行
wee@pc~$sed '$d'
# #
5.从第n行删到第m行
wee@pc~$sed '1,5d'
6.删除匹配字符串的行
wee@pc~$sed '/3/d'
# wee@pc~$sed '/3/!d'
#
wee@pc~$
7.同时定义多个条件用 "-e"
wee@pc~$cat
# # wee@pc~$sed -e '/11/d' -e '/44/d' # wee@pc~$
4.行插入操作(a:行后插入i:行前插入)
[root@VM_41_84_centos ~]# sed '/22/a\insert line'
# insert line
# [root@VM_41_84_centos ~]# sed '/22/i\insert line'
#
insert line #
linux之sed的常用操作的更多相关文章
- Linux系统sed命令常用参数实战
Linux系统sed命令常用参数实战 常用参数 -n 输出某行的文本内容,通常与p联合使用, -e 命令行模式下进行sed的动作编辑,输出编辑后的内容,源文件不会发生变化 -f 以命令中指定的scri ...
- Linux下mysql的常用操作
Linux下mysql的常用操作: 显示数据库 show databases; 选择数据库 use 数据库名; 显示数据库中的表 show tables; 显示数据表的结构 describe 表名; ...
- Linux - nginx基础及常用操作
目录 Linux - nginx基础及常用操作 Tengine淘宝nginx安装流程 nginx的主配置文件nginx.conf 基于域名的多虚拟主机实战 nginx的访问日志功能 网站的404页面优 ...
- linux proc目录和常用操作
------------------------------------------------/proc----------------------------------------------- ...
- 【Apache系列】linux下Apache的常用操作
1. 启动/停止 1.1假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: /usr/local/apache2/bin/apachect ...
- Linux中vim编辑器常用操作技巧
Normal 0 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-styl ...
- Linux(CentOS)常用操作指令(一)
基本指令集合 1.查看CentOS版本信息 cat /proc/version cat /etc/redhat-release 2.查看安全日志文件信息 tail -f /var/log/secure ...
- linux下svn命令常用操作
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain 简写:s ...
- linux 中数据库的常用操作
1-连接数据库: mysql -h localhost -u jiangbiao -p xxxxx@xxx:~$ mysql -h localhost -u jiangbiao -p Enter pa ...
随机推荐
- macbook pro 突破校园网inode客户端限制分享网络
[原创] 环境: 1. macbook pro (retina) 2. mac os x 10.9 3. H3C inode for mac 7.0 分享方法: 1.打开inode联网. 2.打开设置 ...
- HMM 隐马尔科夫模型
参考如下博客: http://www.52nlp.cn/itenyh%E7%89%88-%E7%94%A8hmm%E5%81%9A%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8 ...
- EQueue - 一个C#写的开源分布式消息队列的总体介绍(转)
源: EQueue - 一个C#写的开源分布式消息队列的总体介绍 EQueue - 一个纯C#写的分布式消息队列介绍2 EQueue - 详细谈一下消息持久化以及消息堆积的设计
- C#-WebForm-AJAX阿贾克斯(一)基本格式
AJAX 即" Asynchronous Javascript And XML "(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异 ...
- linux pci 协议一
当当热卖商品推荐 先打下广告,上面是一本好书了O(∩_∩)O~ 前言 因为遇到一个pci总线的问题,所以去学习了解linux 的pci驱动,中间总结了一些pci总线原理和linux驱动的知识,在此总结 ...
- pcommlite串口通讯库使用
MFC下串口编程使用最多的两种方法是读取注册表和使用mscomm组件,都有着或多或少的缺陷,调用系统SDK比较麻烦,而MSCOMm组件最多支持16个串口,串口号大于16的时候无法打开,遇到这种情况,可 ...
- ios 字体设计
ref: http://ju.outofmemory.cn/entry/217705 ref:http://gold.xitu.io/entry/57958a41128fe10056be13b1 下面 ...
- cocos2d-x---开篇介绍
关于cocos2d-x这一游戏引擎,现在受到了手机游戏开发者的青睐.其实cocos2d一开始是由于cocos2d-iphone的成功,然后带动各类开源项目越来越火.由苹果独家的Objective-C到 ...
- u-boot-2016.07 README文档结构
Author:AP0904225版权声明:本文为博主原创文章,转载请标明出处. 阅读u-boot的README文档,可以获取很多有用的信息,例如从哪里可以获得帮助,帮助:u-boot版本命名规则,目录 ...
- dotnet调用node.js写的socket服务(websocket/socket/socket.io)
https://github.com/jstott/socketio4net/tree/develop socket.io服务端node.js,.里面有js写的客户端:http://socket.io ...