文件处理三剑客之sed用法

sed使用方式

用于利用语法/脚本对文本文件进行批量的编辑操作

**语法格式:**sed 参数(或 “参数”) 文件

【参数】

参数作用
-e或–expression=

“参数”

参数作用
‘1d’将第几行删除(1可以为任何数)
‘/<内容或行号>/a\ <需要修改的内容>’将指定内容添加到某行的后面
‘/<内容或行号>/i<需要修改的内容>’将指定内容添加到某行的前面
‘/<行号或内容>/c/<修改后的内容>’将指定行内容替换为指定内容
‘y/<大(小)写字母>/<小(大)写字母>/’将文件中的文本小写(大写)转换成大写(小写)
‘s/<匹配的内容>/<替换后的内容>/g’将匹配到的文本全部替换 g:全部 p:打印 n:换行 N: 包括自己的两行

【例】

#: 将指定行替换
sed /2,4/c/hillo/word (文件名) #:将文件中的24行替换为hillo和 word
#:
sed -r 's/<匹配的内容>/&/g' :&:表示正则表达式匹配到的本身
#:\t: 表示tab制表符
sed 's/\t/\n<数字> ':将某一行的制表符替换成换行 或将\t替换成内容就是在指定内容处换行
sed '/<匹配内容>/<替换后内容>/;s/<匹配内容>/<替换后内容>/g': 同一条命令执行多次处理, (;):表示命令停止和管道符类似

使用案例,(以下例子中都未加-i 选项所以都为对文件产生更改,还有个别是对查看内容进行过滤,):

1:查找指定文件中带有某个关键词的行:

[root@redhat8 ~]# cat -n anaconda-ks.cfg | sed -n '/root/p'
    20	rootpw --iscrypted $6$c2VGkv/8C3IEwtRt$iPEjNXml6v5KEmcM9okIT.Op9/LEpFejqR.kmQWAVX7fla3roq.3MMVKDahnv0l/pONz2WMNecy17WJ8Ib0iO1
    40	pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty

2:替换指定文件中某个关键词成大写形式:

[root@redhat8 ~]# sed 's/root/ROOT/g' anaconda-ks.cfg
………………省略输出信息………………
#:匹配中由于内容会存在'/'所以将s/root/ROOT/g可换成s#root#ROOT#g避免将需要匹配文本中的/产生冲突即将“/”换成“#”

3:读取指定文件,删除所有带有某个关键词的行:

[root@redhat8 ~]# sed '/root/d' anaconda-ks.cfg 
………………省略输出信息………………

4:读取指定文件,在第4行后插入一行新内容:

[root@redhat8 ~]# sed -e 4a\NewLine anaconda-ks.cfg 
#version=RHEL8
ignoredisk --only-use=sda
autopart --type=lvm

# Partition clearing information

NewLine
………………省略部分输出信息………………

5:读取指定文件,在第4行后插入多行新内容:

[root@redhat8 ~]# cat anaconda-ks.cfg  | sed -e '4a NewLine1 \
> NewLine2 \
> NewLine3 '
#version=RHEL8
ignoredisk --only-use=sda
autopart --type=lvm
# Partition clearing information
NewLine1 
NewLine2 
NewLine3 
clearpart --none --initlabel
# Use graphical install
graphical
………………省略部分输出信息………………

6:读取指定文件,删除第2-5行的内容:

[root@redhat8 ~]# cat  -n /etc/passwd | sed '2,5d' 
     1	root:x:0:0:root:/root:/bin/bash
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
………………省略部分输出信息………………

7:读取指定文件,替换第2-5行的内容:

[root@redhat8 ~]# sed '2,5c NewSentence' anaconda-ks.cfg 
#version=RHEL8
NewSentence

# Use graphical install

graphical
repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream

# Use CDROM installation media

cdrom
………………省略部分输出信息………………

8:指定读取某个文件的第3-7行:

[root@redhat8 ~]# sed -n '3,7p' anaconda-ks.cfg 
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel
# Use graphical install
graphical

9: 打印包含指定内容的行

[root@redhat8 ~]# sed -n '/root/p' anaconda-ks.cfg 
rootpw --iscrypted $6$3n1YL/3n0PWSziXU$ZpkV1Re4cRmkUxRPZ9iE2jfUKsEcMgntXf/TBjxIOzOtB/.JkZxVWXkvzhMx/UyRJ/bLR76K3/AMetX95InC31
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty

10:打印匹配到的文本以及下一行

[root@redhat8 ~]# sed -n '/root/{N;p}' anaconda-ks.cfg 
rootpw --iscrypted $6$3n1YL/3n0PWSziXU$ZpkV1Re4cRmkUxRPZ9iE2jfUKsEcMgntXf/TBjxIOzOtB/.JkZxVWXkvzhMx/UyRJ/bLR76K3/AMetX95InC31
# Run the Setup Agent on first boot
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok

11: 将文件中的制表符替换为换行符

[root@redhat8 ~]# cat c
1: lo: <LOOPBACK,UP,LOWER_UP> mtu        65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

[root@redhat8 ~]# sed 's/\t/\n/' c
1: lo: <LOOPBACK,UP,LOWER_UP> mtu
 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00


12: 使用“;”将两次任务结合(将文件中的制表符替换为换行,并将文件中的空行 替换为hillo)

[root@redhat8 ~]# cat c
1: lo: <LOOPBACK,UP,LOWER_UP> mtu        65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo
[root@redhat8 ~]# sed 's/\t/\n/;s/^$/hillo/g' c
1: lo: <LOOPBACK,UP,LOWER_UP> mtu
 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
hillo
    inet 127.0.0.1/8 scope host lo

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值