shell文本处理sed

shell文本处理sed

定义:
sed:stream editor 是一种行编辑器,
Sed的工作原理:
它一次处理一行内容。具体的操作过程为:处理时把当前处理的行存储到临时缓存区,称为“模式空间”接着用sed编辑命令处理缓存区的内容,处理完成后,把缓存区里面的内容送往屏幕,接着来处理下一行,不断地重复,直到文件的末尾。
Sed的优势:
Sed编辑器以批处理的方式来编辑文件,这比交互式编辑器(如vim)要快,可以快速的完成对数据的编辑修改。
可以单独的建立复杂的编辑脚本并作为给 sed 的命令文件,能够减少可观的键入和随之带来的错误。
Sed劣势:
相较于交互式编辑器而言,根本性的损失是缺乏相对地址(由于操作是每次一行的),和缺乏对命令如期运行的立即验证。
sed的使用:
sed命令参数

p	##显示
d	##删除
a	##添加
c	##替换
i	##插入

sed [参数] ‘命令’ file
-e选项(默认情况):
在处理输入时,sed后面直接添加编辑命令

sed -e ‘命令’ file
sed -e 's/root/ROOT/g' /etc/passwd  ##将/etc/passwd文件中root替换ROOT

在这里插入图片描述
一条编辑命令时,-e选项可以省略。但是当一条sed语句中执行多个编辑命令时,不可以省略
在这里插入图片描述
-f选项:
在处理输入时,使用sed脚本。将所用到的sed编辑命令写入一个文件,然后使用sed -f来读取该文件:

vim script.sed
$ cat script.sed
$ s/root/ROOT/g
$ s/bin/BIN/g
$ s/home/HOME/g
sed -f script.sed /etc/passwd

-n选项:
不产生命令输入

sed -n 's/root/ROOT/g' /etc/passwd

使用-n选项不会将内容输出到屏幕上,通常结合p命令使用用来打印被匹配的行

sed -n '/^#/p' /etc/fstab   ##将/etc/fstab文件中以#开头的行输出

在这里插入图片描述
-i选项:
改变原文件内容

sed -i 's/westos/redhat/' passwd
sed -i 's/westos/redhat/g' passwd	##全局替换

使用sed命令进行文本处理

打印某些内容(n与p命令结合起来使用)

sed -n '/\:/p' /etc/fstab
sed -n '/^#/p' /etc/fstab
sed -n '/^#/!p' /etc/fstab
sed -n '2,6p' /etc/fstab  	##打印/etc/fstab中2-6行
sed -n '2,6!p' /etc/fstab 	##将/etc/fstab中除了2-6行打印出来
sed -n '1~2p' /etc/fstab	##打印奇数行
sed -n '2~2p' /etc/fstab	##打印偶数行

在这里插入图片描述
在这里插入图片描述
使用sed命令删除行
sed使用d命令来删除文本中的特定行。

sed '/^UUID/d' /etc/fstab 
sed '/^#/d' /etc/fstab 
sed '/^$/d' /etc/fstab 
sed '1,4d' /etc/fstab 

在这里插入图片描述
使用sed命令附加文本
sed编辑器使用a命令来向数据流附加文本行,a命令会在指定行后增加一个新行。

sed '/hello/aworld' westos
sed 's/hello/hello world/g' westos
sed 's/hello/hello\nworld/g' westos

使用sed命令替换行
使用c可以将数据流中整行文本修改为新的行

sed ‘/hello/chello world’ westos
在这里插入图片描述
使用sed命令插入文本
sed编辑器使用i命令来向数据流中插入文本行,i命令会在指定行前增加一个新行

sed '/hello/iworld\nwestos' westos

使用sed命令处理文件

向文件中写入数据

sed '1,2w test.txt' /etc/passwd 

将数据流中的/etc/passwd中的第1,2行写入到文件test.txt中去
从文件中读取数据
使用r命令来将一个文本中的数据插入到数据流中

sed '3 r test.txt' /etc/passwd

将文件test.txt中内容插入到数据流第三行后面

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值