shell脚本学习(二十三)——“文本三剑客”之sed命令

1 sed命令

sed :stream editor 行编辑器
vim :交互式编辑器
sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed编辑命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

sed的优点:sed速度快,在启动vim的时间,sed已经完成了需要执行的操作

2 sed命令的功能

sed命令选项

选项描述
-e script在处理输入时,将script中指定的命令添加到运行的命令中
-f file在处理输入时,将file中指定的命令添加到运行的命令中
-n不要为每个命令生成输出,等待print命令来输出

(1)标记替换

sed命令可以对文本的内容进行替换,可以对文件中的单一行,也可以对整个文件的内容,并且可以对指定行的内容进行替换。

1)对文件中的内容进行替换

  • 单句替换
sed  's/要替换的内容/替换后的内容'
  • 对整个文件中的内容进行替换
sed 's/要替换的内容/替换后的内容'  file

在这里插入图片描述

  • 一次对整个文件中的多个对象进行替换
方法一:
sed -e 's/要替换的内容1/替换后的内容1;s/要替换的内容2/替换后的内容2/' file
方法二:

sed -e '
> s/要替换的内容1/替换后的内容1/
> s/要替换的内容2/替换后的内容2/
> s/要替换的内容3/替换后的内容3/' file

在这里插入图片描述

  • 指定行替换
sed '2s/dog/tiger/' 	test			#指定替换第二行
sed '4s/dog/tiger/' 	test			#指定替换第四行
sed '2,4s/dog/tiger/' 	test			#指定替换第2到4行
sed '2,$s/dog/tiger/' 	test			#指定替换第二行到最后
sed '2{									
> s/dog/tiger/
> s/brown/red/
> s/fox/ribbit/
> }' test								#多个要求替换第二行

在这里插入图片描述
在这里插入图片描述

  • 使用文件中指定命令替换另一文件
[root@desktop sed]# cat script 
s/brown/red/
s/fox/tiger/
s/dog/cat/
[root@desktop sed]# sed -f script test 

在这里插入图片描述

注意:进行替换后不会改变原文件的内容

(2) 参数g p和-n

1)参数g

  • 当每一句中含有多个相同的内容时
sed 's/test/trial/'  data    #不加任何参数时默认替换每句中出现第一次的关键字
sed 's/test/trial/g' data	 #加上g参数时替换所有出现的关键字
sed 's/test/trial/2' data	 #加具体的数字n时,替换每句中出现第n次的关键字

2)参数p和-n

p显示指定句,通常和-n搭配使用; -n:默认不显示所有内容

sed -n 's/test/trial/p' 	test1		#只显示修改部分
sed -n 's/number/num/' 		test2		#使用-n而不使用p参数时,不会有显示
sed -n '/number3/p' 		test2		#显示匹配到的含有number3的行
sed -n '1,3p' 				test2		#显示1到3行

在这里插入图片描述

(3)参数w:写入文件

sed 's/test/trial/w test' test1			#将修改的句子写入test文件
sed '1,2w test' 		  test2			#将1到2行写入test文件

在这里插入图片描述

(4)要替换部分中含有/符号时的解决

  • 方法一:用\转义符号进行转义
  • 方法二:修改格式中的/改为!或者#
sed 's/\/bin\/bash/\/bin\/csh/' test3
sed 's#/bin/bash#/bin/sssh#' 	test3

在这里插入图片描述

(5)参数d:删除

sed 'd' 	test2			#删除全部
sed '2d' 	test2			#删除第二行
sed '4d' 	test2			#删除第四行
sed '1,3d' 	test2			#删除第1到3行
sed '3,$d' 	test2			#删除第2行到结束的行

在这里插入图片描述
这里也可以使用正则表达式
在这里插入图片描述

(6)参数i和a:插入和追加

echo 'test 2' | sed 'i\test 1'	#i表示插入到前面
echo 'test 2' | sed 'a\test 1'	#a表示追加到末尾
sed '3i\test 1' test2			#插入到第三行前面
sed '3a\test 1' test2			#追加到第三行后面

[root@desktop sed]# sed '1i \
> new line1.\
> new line2.\
> new line3.' test2				#在test2文件的第一行前面插入多条

[root@desktop sed]# sed '$a/This is an inserted line.\nThis is another insertes line.' test2          #在test2文件的最后一行后追加多条

在这里插入图片描述
在这里插入图片描述

(7)参数c:修改

sed '3c\new line3.' 		test2  				#修改指定的行,第三行
sed '/number1/c\new line.'  test2               #修改包含指定信息的行
sed '2,4c\new line.' 		test2				#修改多行,注意:此处的修改多行为同时修改,而不是逐行修改

在这里插入图片描述

  • 修改指定单个字符
sed 'y/123/789/' test2

当一行中包含多个要修改的单个字符时,默认全部修改:
echo "This 1 is a test of 1 try." | sed 'y/123/789/'  

在这里插入图片描述

(8)显示行号:’=’

sed '=' test2

在这里插入图片描述

(9)参数r:组合两个文件

sed '3r test1' test2			#将test1文件内容添加到test2文件中第三行后面
sed '/number2/r test1' test2	#将test1文件内容添加到test2文件内容number之后

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值