Linux中文本处理命令sed的使用示例分享
sed对文本的处理很强大,并且sed非常小,参数少,容易掌握,他的操作方式根awk有点像。sed按顺序逐行读取文件。然后,它执行为该行指定的所有操作,并在完成请求的修改之后的内容显示出来,也可以存放到文件中。完成了一行上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。在这里要注意一点,源文件(默认地)保持不被修改。sed 默认读取整个文件并对其中的每一行进行修改。说白了就是一行一行的操作。我用sed主要就是用里面的替换功能,真的很强大。下面以实例,详细的说一下,先从替换开始,最常用的。
参数
sed -h
-n, --quiet, --silent 取消自动打印模式空间
-e 脚本, --expression=脚本 添加“脚本”到程序的运行列表
-f 脚本文件, --file=脚本文件 添加“脚本文件”到程序的运行列表
--follow-symlinks 直接修改文件时跟随软链接
-i[扩展名], --in-place[=扩展名] 直接修改文件(如果指定扩展名就备份文件)
-l N, --line-length=N 指定“l”命令的换行期望长度
--posix 关闭所有 GNU 扩展
-r, --regexp-extended 在脚本中使用扩展正则表达式
-s, --separate 将输入文件视为各个独立的文件而不是一个长的连续输入
-u, --unbuffered 从输入文件读取最少的数据,更频繁的刷新输出
--help 打印帮助并退出
--version 输出版本信息并退出
例1
测试文件
复制代码代码如下:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying::1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
例a,这个例子,把test文件中的root替换成tankzhang,只不过只替换一次及终止在这一行的操作,转到下一行
复制代码代码如下:
[zhangy@BlackGhost mytest]# sed 's/root/tankzhang/' test |grep tank
tankzhang:x:0:0:root:/root:/bin/bash
例b,这个例子,用tankzhang把文件test中的root全部替换掉,请注意g这个字母,global的缩写
复制代码代码如下:
[zhangy@BlackGhost mytest]# sed 's/root/tankzhang/g' test |grep zhang
tankzhang:x:0:0:tankzhang:/tankzhang:/bin/bash
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
@zhangying::1004:1004::/home/test:/bin/bash
例c,加了-n p后表示只打印那些发生替换的行(部分替换),上面的例子,我并没有加上grep
复制代码代码如下:
[zhangy@BlackGhost mytest]# sed -n 's/root/tankzhang/p' test
tankzhang:x:0:0:root:/root:/bin/bash
例d,加了-n pg后表示只打印那些发生替换的行(全部替换),上面的例子,我并没有加上grep
复制代码代码如下:
[zhangy@BlackGhost mytest]# sed -n 's/root/tankzhang/pg' test
tankzhang:x:0:0:tankzhang:/tankzhang:/bin/bash
例e,在第二行,到第八行之间,替换以zhang开头的行,用ying来替换,并显示替换的行
复制代码代码如下:
[zhangy@BlackGhost mytest]# cat test | sed -ne '2,8s/^zhang/ying/gp'
yingy:x:1000:100:,,,:/home/zhangy:/bin/bash
例f,当有多个命令要执行时,可以用分号来分开,并且分隔符可以自定义,默认是/。上面的例子意思是在第二行,到第八行之间,替换以zhang开头的行,用ying来替换,在5,到10间,用goodbay来替换dbus,并显示替换的行
复制代码代码如下:
[zhangy@BlackGhost mytest]# cat test | sed -n'2,8s/^zhang/ying/gp;5,10s#dbus#goodbay#gp'
yingy:x:1000:100:,,,:/home/zhangy:/bin/bash
goodbay:x:81:81:System message bus:/:/bin/false
例g,这个例子根上面的那个例子一样,只不过有一点不同,那就是-e来充当了分号的作用,-e也能分割多个命令。
复制代码代码如下:
[zhangy@BlackGhost mytest]# cat test | sed -ne '2,8s/zhang/ying/gp' -ne'5,10s#dbus#goodbay#gp'
yingy:x:1000:100:,,,:/home/yingy:/bin/bash
goodbay:x:81:81:System message bus:/:/bin/false
例h,正则的用法,在sed里面用括号的话要加上\的,不然会报错的。
复制代码代码如下:
[zhangy@BlackGhost mytest]# sed -ne '2,8s/^(zhangy)/\1ing/gp' test
zhangying:x:1000:100:,,,:/home/zhangy:/bin/bash
[root@masters ~]# sed -ne '2,8s/^(zhangy)/ing/gp' test
zhangying:x:1000:100:,,,:/home/zhangy:/bin/bash
例i,&的用处是,在找到的字符串后加上&后面的字符串,zhang后都加上了ying
复制代码代码如下:
[zhangy@BlackGhost mytest]# sed -ne '2,15s/zhang/ying/gp' test
zhangyingy:x:1000:100:,,,:/home/zhangyingy:/bin/bash
ba:x:1002:1002::/home/zhangyingy:/bin/bash
@zhangyingying::1004:1004::/home/test:/bin/bash
例j,这个例子是说,在以zhang开头的行开始,到匹配Po的行结束,在他们之间进行替换
复制代码代码如下:
[zhangy@BlackGhost mytest]# sed -ne '/^zhang/,/Po/s/zhang/ying/gp' test
yingy:x:1000:100:,,,:/home/yingy:/bin/bash
ba:x:1002:1002::/home/yingy:/bin/bash
@yingying::1004:1004::/home/test:/bin/bash
例k,n;这里的n是next的缩写,找到root的行后,将其下一行的中的bin换成tank
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed'/root/{n;s/bin/tank/}' test
root:x:0:0:root:/root:/bin/bash
tank:x:1:1:bin:/bin:/bin/false
例m,y的作用是将匹配的字符换成大写,不过替换字符和被替换字符长度要一样
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed -e '1,2y/root/ROOT/' test
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
例n,h的作用是将找到的行,放到一个缓存区,G的作用是将缓存区中的内容放到最后一行
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed -e '/root/h' -e '$G' test
................................
.............................
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying::1004:1004::/home/test:/bin/bash
root:x:0:0:root:/root:/bin/bash
例o,行替换,用匹配root的行,来替换匹配zhangy的行
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed -e '/root/h' -e '/zhangy/g' test
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
nobody:$:99:99:nobody:/:/bin/false
root:x:0:0:root:/root:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
root:x:0:0:root:/root:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
root:x:0:0:root:/root:/bin/bash
例p,这个例子是说,在以zhang开头的行开始,到匹配Po的行结束,在他们之间进行替换
复制代码代码如下:
[zhangy@BlackGhost mytest]# sed -ne '/^zhang/,/Po/s/zhang/ying/gp' test
yingy:x:1000:100:,,,:/home/yingy:/bin/bash
ba:x:1002:1002::/home/yingy:/bin/bash
@yingying::1004:1004::/home/test:/bin/bash
例q,3q的意思是到第三行的时候,退出
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed -e 's/bin/tank/g;3q' test
root:x:0:0:root:/root:/tank/bash
tank:x:1:1:tank:/tank:/tank/false
daemon:x:2:2:daemon:/stank:/tank/false
例r,特殊匹配
&&&&
匹配数字别忘了中括号外面还有一个中括号。
[:alnum:] 字母数字 [a-z A-Z 0-9]
[:alpha:] 字母 [a-z A-Z]
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字 [0-9]
[:graph:] 任何可视字符(无空格)
[:lower:] 小写 [a-z]
[:print:] 非控制字符
[:punct:] 标点字符
[:space:] 空格
[:upper:] 大写 [A-Z]
[:xdigit:] 十六进制数字 [0-9 a-f A-F]
复制代码代码如下:
[zhangy@BlackGhost mytest]# sed -ne '2,15s/zhangy.*[[:digit:]]/=======/gp'test
=======:,,,:/home/zhangy:/bin/bash
@=======::/home/test:/bin/bash
例2
例a,删除1,14行
复制代码代码如下:
[zhangy@BlackGhost test]$ sed -e '1,14d' test
@zhangying::1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
例b,删除4以后的行,包括第4行,把$当成最大行数就行了。
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed -e '4,$d' test
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
例c,删除包括false的行,或者包括bash的行,别忘了加\
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed -e '/(false\|bash)$/d' test
policykit:x:102:1005:Po
例d,删除从匹配root的行,到匹配以test开头的行,中间的行
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed -e '/root/,/^test/d' test
@zhangying::1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
例3
例a,读取test2的内容,并将其写入到匹配行的下面
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed -e '/^root/r test2' test
root:x:0:0:root:/root:/bin/bash
=============
-------------
+++++++++++++
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
例b,将匹配数字的行,写入test2中
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed '/[[:digit:]]/w test2' test
例c,将要插入的东西,插入匹配行的下面
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed'/root/a\ ===aaaa====' test
root:x:0:0:root:/root:/bin/bash
===aaaa====
bin:x:1:1:bin:/bin:/bin/false
例d,正好根a相反,将要插入的东西,插入到匹配行的上面
复制代码代码如下:
[zhangy@BlackGhost mytest]$ sed '/^daemon/i\=================' test
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
=================
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
例4
#取得一个文件(或目录)路径的父目录,s@@@为替换格式,\(/.*/\)是指一个"/"后面跟了任意字符又跟了一个"/",其中\(\)是用来把匹配内容作为一个整体后向引用,[^/]\{1,\}是指一个非"/"字符出现了一次,两次,或多次;/\?是指"/"出现了0次或1次,\1是后向引用前面匹配的内容
复制代码代码如下:
[root@practice ~]# echo "/usr/local/bin/" |sed 's@(/./)[^/]{1,}/\?@\1@'
/usr/local/
#使用扩展正则表达式后,亦可如此:
[root@practice ~]# echo "/etc/rc.d/rc.sysinit" | sed -r 's@(/./)[^/]+/?@\1@'
/etc/rc.d/
推荐系统
电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载
语言:中文版系统大小:2.98GB系统类型:Win8电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有
微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载
语言:中文版系统大小:5.13GB系统类型:Win11微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化 1、保留 Edge浏览器。 2、隐藏“操作中心”托盘图标。 3、保留常用组件(微软商店,计算器,图片查看器等)。 5、关闭天气资讯。
Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载
语言:中文版系统大小:4.75GB系统类型:Win11Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件
windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载
语言:中文版系统大小:5.31GB系统类型:Win11windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化
微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载
语言:中文版系统大小:5.31GB系统类型:Win11微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载
微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件
语言:中文版系统大小:0MB系统类型:Win11微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为
雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载
语言:中文版系统大小:4.75GB系统类型:雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统
雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO
语言:中文版系统大小:5.91GB系统类型:Win7雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
相关文章
- I810 Graphics LINUX Driver的安装
- Win10 RS5快速预览版17733今日推送
- 索尼VAIO笔记本电脑开机进入BIOS的方法(F2)
- 进入注册表一些常用的命令大全汇总
- Win10系统怎么查看图片尺寸(大小)?
- 如何在Windows 10中创建时间线快捷方式
- Linux下多线程下载工具MWget和Axel使用介绍
- Linux调整系统inode数量实例
- XP系统启动失败后的十大解决方法
- Linux下如何查看某个软件是否安装???软件的安装路径又在哪???
- 打印机IP地址和端口怎么设置?Win7图文教程
- Win7通过审核策略来监控QQ程序的操作步骤
- 如果没有预定Win10升级 还能免费升级Win10吗?
- Win10 最新预览版10061已发放 暂不支持升级
- 怎么设置电脑开机密码(xp系统)图文详解
- Windows 10首年免费升级 结束后定价仍是谜
- 部分用户升级Win10 RS1预览版11082后:原有的指纹识别信息丢失
- Win10 RS4快速预览版17120今日推送
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 5雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1萝卜家园 GHOST XP SP3 快速稳定版 V2017.12 下载
- 2笔记本&台式机专用系统GhostWin7 64位旗舰版2019年12月(64位) 高速下载
- 3番茄花园 Windows 10 官方企业版 版本1903 2021年10月(64位) ISO高速下载
- 4萝卜家园 GHOST WIN7 SP1 X86 装机旗舰版 V2014.10(32位) 下载
- 5笔记本系统Ghost Win8.1 (32位) 极速纯净版2020年3月(免激活) ISO镜像高速下载
- 6雨林木风Ghost Win8.1 64位 纯净正式版下载 2018年8月免激活)
- 7电脑公司 GHOST WIN7 SP1 X64 装机特别版 V2023.04(64位) 下载
- 8风林火山 GHOST WIN7 SP1 X86 鸡年特别版 V2017.02 (32位) 下载
- 9Win11 22H2下载_Win11 22H2纯净版镜像64位下载
- 10深度技术 WIN7 64位正式安装版 V2023.08 下载