02-shell文本处理三剑客之sed

本文详细介绍了shell中的sed流编辑器,讲解了sed的工作流程、地址定界、基本及高级编辑命令的使用,并给出了多个练习案例,帮助读者掌握如何利用sed进行文本处理,包括删除、追加、替换等操作。
摘要由CSDN通过智能技术生成

sed 是流编辑器,但是它不会修改源文件。

sed (流文本编辑器)
用法:sed OPTIONS… [SCRIPT] [INPUTFILE…]
-r: 使用扩展的正则表达式;
-n, --quiet, --silent: 不输出模式空间的内容;
-i:直接编辑原文件;
-e: -e ‘’ -e ‘’ -e ‘’
‘CMD1;CMD2;CMD3’
-f /path/to/sed_script:从指定的文件读取处理脚本

1 模式空间是什么?
模式空间其实就是内存中一个空间,归sed所有s。ed读取流文本文件的时候,每次读取一行,然后载入内存中,这个内存就成为模式空间。那么我们编辑的内容是属于模式空间中的内容,而不是源文件内容。

[root@hadoop1 shelltest]# sed '1,10d' /etc/fstab 
UUID=04777095-5e99-46d5-87cf-1bc6665635ee swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@hadoop1 shelltest]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Jan 26 09:32:28 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b8a0a61e-c5e1-40e7-9a4f-e9a9096565a9 /                       ext4    defaults        1 1
UUID=a4623924-f98a-47c9-a9e7-38c06e0fc7f6 /boot                   ext4    defaults        1 2
UUID=04777095-5e99-46d5-87cf-1bc6665635ee swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@hadoop1 shelltest]# 

sed ‘1,10d’ /etc/fstab 这一句语句的执行逻辑是,sed把内容读到模式空间中,判断是不是1——10的内容,是的话执行删除命令d,所以删除了1——10行内容,11行以后的内容就显示出来了。
sed的工作流程可以总结为:
第一步:提取一行内容到模式空间
第二步:针对模式空间中的内容执行编辑命令。
第三步:将模式空间中的内容进行输出。
第四步:清空模式空间。

2 地址定界:
#(行号): 指定行
$: 最后一行
/regexp/:任何能够被regexp匹配到的行
%regexp%: 任何能够被regexp匹配到的行;换用%为边界符号;
/regexp/I
%regexp%I:匹配时忽略字符大小写;
addr1, addr2: 指定范围内的所有行:
1·,/regexp/
#(行号),#(行号)
/regexp/,/regexp/
#(行号),+#
first~step:指定起始位置,以及步长 1~3

[root@hadoop1 shelltest]# sed '$d' /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Jan 26 09:32:28 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b8a0a61e-c5e1-40e7-9a4f-e9a9096565a9 /                       ext4    defaults        1 1
UUID=a4623924-f98a-47c9-a9e7-38c06e0fc7f6 /boot                   ext4    defaults        1 2
UUID=04777095-5e99-46d5-87cf-1bc6665635ee swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
[root@hadoop1 shelltest]# 

以上功能是删除了最后一行。

[root@hadoop1 shelltest]# sed '/dev/d' /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Jan 26 09:32:28 2016
#
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b8a0a61e-c5e1-40e7-9a4f-e9a9096565a9 /                       ext4    defaults        1 1
UUID=a4623924-f98a-47c9-a9e7-38c06e0fc7f6 /boot                   ext4    defaults        1 2
UUID=04777095-5e99-46d5-87cf-1bc6665635ee swap                    swap    defaults        0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
[root@
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

当法律与事业相遇

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值