【文本三剑客】sed命令和常见操作

流编辑器sed


请添加图片描述

​ sed是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间”( pattern space ), 接着用sed命合处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

命令格式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

注意:
sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0
只有当命令存在语法错误时,sed的退出状态才是非0

支持正则表达式

与grep一样 , sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。正则表达式是括在斜杠间的模式,用于查找和替换,以下是sed支持的元字符。
使用基本元字符集 ^ $ . * [] [^] \<\> \(\) \{\}
使用扩展元字符集 ? + { } | ( )

使用扩展元字符的方式:
\+
sed -r

sed基本用法

sed -r '' 	passwd
sed -r 'p'	passwd	# 打印
sed -r -n 'p' passwd # 原输出静默处理
sed -r -n '/root/p' passwd # 使用正则

sed -r 's/root/alice/' passwd # 查找替换
sed -r 's/root/alice/gi' passwd # i忽略大小写
sed -r 's#root#alice#go' passwd

sed -r '/root/d' passwd
sed -r '\#root#d' passwd
# 注意:查找时候用#或@等符号需要\转义

sed扩展

地址(定制)

地址用于决定对哪些行进行编辑。地址形式可以是数字、正则表达式或二者的结合。如果没有指定地址,sed将处理输入文件中的所有行。

sed -r 'd' passwd
sed -r '3d' passwd
sed -r '1,3d' paaswd
sed -r '1,$d' passwd
sed -r '/root/d' passwd
sed -r '/root/,5d' passwd

sed -r '/^bin/,5d' passwd	# 删到第5行 不包括原来那行
sed -r '/^bin/,+5d' passwd	# 再删除5行 加上原来那行6行
sed -r '/root/!d' passwd

sed -r '1~2d' passwd	# 删除所有奇数行 odd-numbered
sed -r '0~2d' passwd	# 删除所有偶数行 even-numbered

sed命令

sed命令告诉sed对指定行进行何种操作,包括打印、删除、修改。

a	在当前行后添加一行或多行
c	用新文本修改(替换)当前行中的文本
d	删除行
i	在当前行之前插入文本
l	列出非打印字符
p	打印行
n	读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
q	结束或退出sed
!	对所选行以外的所有行应用命令

s	用一个字符串替换另一个
	s 替换标志
	g 全局替换
	i 忽略大小写
r	从文件中读
w	将行写入文件
y	将字符转换为另一字符(不支持正则表达式)
h	把模式空间中的内容复制到暂存缓冲区(覆盖)
H	把模式空间里的内容追加到暂存缓冲区
g	取出暂存缓冲区的内容,将其复制到模式空间,覆盖该处的原有内容
G	取出暂存缓冲区的内容,将其复制到模式空间,追加该处的原有内容
x	交换暂存缓冲区与模式空间的内容
# 删除:d
sed -r '3{d;}' datafile
sed -r '$d' datafile

# 替换命令:s
sed -r 's/west/north/g' datafile
sed -r 's/^west/north/' datafile
sed -r 's/[0-9][0-9]$/&.5' datafile	# &代表在查找串中匹配的内容	
sed -r 's/(mar)got/\1ann/g' datafile
sed -r 's#3#88#g' datafile

sed常见操作

# 删除配置文件中#号注释行
sed -ri '/^#/d' file.conf
sed -ri '/^[ \t]*#/' file.conf

# 删除配置文件中//注释行
sed -ri '\#^[ \t]*//#d' file.conf

# 删除无内容空行
sed -ri '^[ \-t]*$d/d' file.conf

# 删除注释行及空行
sed -ri '/^[ \t]*#/d;/^[ \t]*$/d' file.conf
sed -ri '/^[ \t]*#|^[ \t]*$/d' file.conf
sed -ri '/^[ \t]*(#|$)/d' file.conf

# 修改文件
sed -ri '$a\chroot_local_user=YES' file.conf 
sed -ri '/^SELINUX=/cSELINUX=disabled' file.conf

# 给文件行添加注释
sed -r '2,6s/^/#/' test
sed -r '2,6s/(.*)/#\1/' test
sed -r '2,6s/.*/#&/'test	# &代表在查找串中匹配的内容	

# 将行首零个或多个#换成一个#
sed -r '3,$ s/^#*/#/' test
sed -r '3,10 s/^[ \-t]*#/#/' test
sed -r '2,8 s/^[ \-t#]*/#/' test

# sed -r '1!G;$!h;$!d' 12345.txt

sed使用外部变量

var1=11111
(x)sed -ri '3a$var1' file
sed -ri "3a$var1" file
sed -ri 3a$var1 file

(x)sed -ri "$a#var1" file # 在尾行添加var1
sed -ri '$a'"$var1" file
sed -ri "\$a$var" file 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值