3、linux sed -- 常用的流处理文本编辑器

3、linux基础操作命令详解

sed --常用的流处理文本编辑器
常见参数说明
p打印输出
d删除
=打印匹配行的行号
-n取消默认的完整输出,只要需要的(行)
-e允许多项编辑
-i修改文件内容
-r不需要转义
&上次匹配的结果
命令功能
a\在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用""续行
i\在当前行之前插入文本。多行时除最后一行外,每行末尾需用""续行
d删除行
h把模式空间里的内容复制到暂存缓冲区
H把模式空间里的内容追加到暂存缓冲区
g把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容(全部替换)
G把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
l列出非打印字符
p打印行
n读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
q结束或退出sed
r从文件中读取输入行
!对所选行以外的所有行应用命令
s用一个字符串替换另一个(替换)
g在行内进行全局替换
w将所选的行写入文件
x交换暂存缓冲区与模式空间的内容
y将字符替换为另一字符(不能对正则表达式使用y命令)

示例:

cat /etc/passwd > passwd

只打印第三行

sed -n '3p' passwd 

# daemon:x:2:2:daemon:/sbin:/sbin/nologin

只查看文件的第3行到第9行

sed -n '3,9p' passwd

# daemon:x:2:2:daemon:/sbin:/sbin/nologin
# adm:x:3:4:adm:/var/adm:/sbin/nologin
# lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# sync:x:5:0:sync:/sbin:/bin/sync
# shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
# halt:x:7:0:halt:/sbin:/sbin/halt
# mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

过滤特定字符串,显示正行内容

sed -n '/root/p' passwd

# root:x:0:0:root:/root:/bin/bash
# operator:x:11:0:operator:/root:/sbin/nologin

显示包含"adm"的行到包含"mail"的行之间的行

sed -n '/adm/,/mail/p' passwd

# adm:x:3:4:adm:/var/adm:/sbin/nologin
# lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# sync:x:5:0:sync:/sbin:/bin/sync
# shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
# halt:x:7:0:halt:/sbin:/sbin/halt
# mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

打印1-5行,并显示行号

sed -n -e '1,5 p' -e '1,5 =' passwd

# root:x:0:0:root:/root:/bin/bash
# 1
# bin:x:1:1:bin:/bin:/sbin/nologin
# 2
# daemon:x:2:2:daemon:/sbin:/sbin/nologin
# 3
# adm:x:3:4:adm:/var/adm:/sbin/nologin
# 4
# lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# 5

仅仅显示匹配字符串的行号

sed -n '/root/=' passwd

# 1
# 10

打印匹配行的内容和符号【相当于后面又根据关键词查询了一次】

sed -n -e '/root/p' -e '/root/=' passwd

# root:x:0:0:root:/root:/bin/bash
# 1
# operator:x:11:0:operator:/root:/sbin/nologin
# 10

用world 替换passwd文件中的root【真实写入】

sed -i 's/root/world/g' passwd
sed -i 's#root#world#g' passwd 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SORMICcG-1599815790037)(./1566283526860.png)]

打印最后一行

sed -n '$p' passwd

# test:x:1003:1003::/home/test:/bin/bash

在文件第一行添加happy,文件结尾添加new year

sed -e '1i happy' -e '$a new year' passwd   	#【界面显示】
sed -i -e '1i happy' -e '$a new year' passwd	#【真实写入文件】

在文件第一行到第四行的每行下面添加hahaha

sed '1,4i hahaha' passwd  #输出 不改变源文件

& 符号在sed命令中代表上次匹配的结果

sed 's/world/hello_&/g' passwd

# 把world替换成hello_world

删除第3到第9行

sed '3,9d' passwd  #输出不改变源文件

# cat passwd | wc -l
# 32
# sed '3,9d' passwd | wc -l
# 25

删除包含"root"的行到第十行的内容

sed '/root/,10d' passwd

# sed '/root/,10d' passwd | wc -l
# 22

备注:范围可以用数字、正则表达式、或二者的组合表示
显示中10到15行里匹配root,把行内所有的root替换为FTL,并打印到屏幕上

sed '10,15 s/root/FTL/g' passwd			#【仅显示用】
sed -i sed '10,15 s/root/FTL/g' passwd	#【-i 会真正替换信息】

-e是编辑命令,用于多个编辑任务
删除1到5行后,替换test为hello_world

sed -e '1,5d' -e '=' -e 's/bin/hello_world/g' passwd  

打印3到6行的内容,并匹配reboot替换为shutdown

# 先匹配后替换
sed -n -e '3,6p' -e 's/bin/shutdown/g' passwd 
# 先替换后匹配
sed -n -e 's/bin/shutdown/g' -e '3,6p' passwd 

-r 命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上

sed '/root/ r test.txt' passwd 
# 【passwd  匹配root后读入text.txt的内容在匹配内容之下,仅显示用】

-w是写入命令

sed -n '/root/ w root.txt' passwd      #【passwd 匹配root后写入root.txt',真实写入】
# 添加-n参数后,不打印源文件,抑制输出

sed的正则匹配
正则匹配IP和子网掩码

ifconfig |sed -n '2p'
ifconfig |sed -n '2p' | sed -r 's#.*r:(.*) B.*k:(.*)#\1 \2#g' 
 
      (.*)表示匹配的项,之后可以用\1取出第一个括号内匹配的内容,\2取出第二个括号内匹配的内容  

配合find命令的使用

find . -name  "*.txt" |xargs   sed -i 's/hhhh/\hHHh/g'
find . -name  "*.txt" |xargs   sed -i 's#hhhh#hHHh#g'
find . -name  "*.txt" -exec sed -i 's/hhhh/\hHHh/g' {} \;
find . -name  "*.txt" |xargs cat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值