sed简介

简述linux中sed的用法

一: sed工具简介

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储
在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令
处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入
下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循
环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末
尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

二: sed工具基本用法

◆ 命令格式:

sed [option] 'script' inputfile....
sed默认是将文本文件打印输出到屏幕

▲ option(选项):

-n : 不自动打印
-e : 多次编辑
-f :/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r : 支持使用扩展正则表达式
-i : 直接对原文件进行编辑
-i.bak: 备份文件并原处编辑

▲ ‘script’(‘地址命令’):

地址:
(1) 不给地址:对全文进行处理
(2) 单地址:
#: 指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
(3) 地址范围:
#,#表示从第几行到第几行
#,+#表示从第几行开始,到#+#行
/pat1/,/pat2/表示从第一次匹配pat1的行到第一次匹配pat2的行,支持正则表达式
#,/pat1/
(4) ~:步进
1~2 奇数行–表示从第一行开始,每隔2行取出来,即奇数行
2~2 偶数行–表示从第一行开始,每隔2行取出来 ,即偶数行
命令:
d: 删除模式空间匹配的行,并立即启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
a [ \ ]text:在指定行后面追加文本,支持使用\n实现多行追加
i [ \ ]text:在行前面插入文本
c [ \ ]text:替换行为单行或多行文本
w /path/somefile: 保存模式匹配的行至指定文件
r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后
=: 为模式空间中的行打印行号
!:模式空间中匹配行取反处理

例如:

[guofu@localhost hhh]$ cat /data/hhh/pidd       
root:x:0:0:root:/root:/bin/bash  
bin:x:1:1:bin:/bin:/sbin/nologin   
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[guofu@localhost hhh]$ sed '1,+2p' /data/hhh/pidd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[guofu@localhost hhh]$ sed -n '1,+2p' /data/hhh/pidd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[guofu@localhost data]$ sed '2a\hello world' ./hhh/pidd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
hello world
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

◆ sed工具支持查找替换:

格式:s/要查找的内容/替换为的内容/修饰符, s前面可加行号表示直接在第几行搜索替换,%表示全文搜索。即sed [option] ‘s///’ inputfile…
要查找的内容:可使用正则表达式模式
替换为的内容:不能使用正则表达式模式,但可以使用\1, \2, …等后向引用符号;还可
以使用“&”引用前面查找时查找到的整个内容
修饰符:
i: 忽略大小写
g: 全局替换;默认情况下,每一行只替换第一次出现
gc:全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符,例如
s@/etc@/var@g
s# /boot # / #i
例如:

[guofu@localhost data]$ cat pfd1 
# Generated by NetworkManager
rooter localdomain  rooter  is lover  
nameserver 192.168.153.2 nameserver1
[guofu@localhost data]$ sed -ri  's#^\<r.*r\>#root#g' ./pfd1 
[guofu@localhost data]$ cat pfd1 
# Generated by NetworkManager
root  
nameserver 192.168.153.2 nameserver1

慢慢求学

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值