sed

2022-10-27 14:34:21 浏览数 (3)

语法

代码语言:javascript复制
sed [option] 'script' FILENAME

option:
	-n:不往屏幕上打印模式空间中的内容
	-e:多点编辑
	-f /PATH/FILENAME:从指定文件中读取脚本
	-r:支持使用扩展正则表达式
	-i.bak:编辑文件之前先备份

script:
	'地址命令'

option

选项 -n

有一个test文件,文件内容如下:

打印这个文件的第二行

会发现第二行输出了两行,是因为sed是按行处理的,每处理一行就存储到模式空间中,sed把模式空间的内容全都输出了,我们又用2p打印了第二行,所以就会出现上图中的内容,如果我们不输出模式空间中的内容,只输出我们指定的行,应该怎么做呢?加上-n参数即可

选项 -e

如果想输出第二行和第五行的内容,可以多次指定-e参数

选项 -f

如果脚本(就是引号中的)比较多,可以把这些脚本写到一个文件中,每行一个

把2p(打印第二行)和4p(打印第四行)写到script文件中,使用sed -f指定脚本名

选项 -i.bak

代码语言:javascript复制
sed -i.bak '/pattern/' FILENAME		# 在修改文件之前,先备份,在修改,备份文件名为 FILENAME.bak

script

地址

不写地址
代码语言:javascript复制
如果省略地址,处理文件中的所有行
单地址
代码语言:javascript复制
# 		# 行号,指定的行
$		# 最后一行
/pattern/	# 能够被正则表达式匹配到的每一行
地址范围
代码语言:javascript复制
#,#			# 行号,第几行到第几行
#, #			# 比如10, 20,就是10到10 20行
/pattern1/,/pattern2/	# 从满足pattern1模式开始,到满足pattern2模式结束
#,/pattern1/		# 从第#行开始,到满足pattern1模式结束
步长
代码语言:javascript复制
1~2			# 从第一行开始,步长为2,就是奇数行
2~2			# 从第二行开始,步长为2,就是偶数行

命令

代码语言:javascript复制
d			# 删除模式空间匹配到的行
p			# 打印当前模式空间的内容
!			# 模式空间的行取反
abb			# 追加,在指定的行后面追加文本
ibb			# 追加,在指定的行前面追加文本
cbb			# 替换
w /PATH/FILENAME	# 保存模式匹配的行到指定的文件
r /PATH/FILENAME	# 从指定的文件中读取内容到模式空间中匹配到的行后面
命令 d

删除模式空间的第2行,打印其他行

命令 !

要把!号放在行号后面

命令 a

从第一行到第五行,每一行后面都追加“ ”

命令 i

在指定的行前面追加文本内容

命令 c

使用指定的文本内容替换指定的行

命令 w

我们把test文件中的第一行到第三行的内容,保存到/tmp/test01文件中

命令 r

我们把/tmp/test01文件中的内容读取出来,插入到第二行的后面

替换

代码语言:javascript复制
s///:查找替换,还可以用其分隔符,如s@@@,s###
替换标记:
	g:行内全局替换
	p:显示替换成功的行
	w /PATH/FILENAME:把替换成功的行保存到文件中

0 人点赞