sed命令

这里写图片描述
sed是一种在线编辑器,它一次处理一行内容。处理时,把当 前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)(为什么叫模式空间呢:因为 sed(不是所有的行都处理)可以指定仅仅处理哪些行,所以 sed 可以像 grep 一样做模式过滤的 符合模式条件的处理 不符合条件的不予处理 )接着用sed 编辑命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。符合模式(模式空间中的模式 每次读取一行 匹配模式 编辑命令)做编辑(到底是删除还是现实还是什么 取决于 sed的编辑命令)Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
2. 定址
可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如 1,3 表示 1,2,3 行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定
3.Sed 命令格式
调用 sed 命令有两种形式:
sed [options] ‘command’ file(s)
sed [options] -f scriptfile file(s)

下边主要以第一种为例,这里说明下第二种方法:新建文件/mnt/rule

cd /mnt
cat lee        ##没有内容
vim rule
/^UUID/p
/^UUID/w /mnt/lee
sed -f rule fstab
cat lee         ##多了行以UUID开头的内容

这里写图片描述
4.sed 对字符的处理

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

p模式:显示

sed -n '/\:/p' fstab      显示fsatb中:行
sed -n '/UUID$/p' fstab   显示fsatb中UUID结尾行
sed -n '/^UUID/p' fstab   显示fsatb中UUID开始行
sed -n '3,6p' fstab       显示fsatb中36行
sed -n '3,6!p' fstab      显示fsatb中除了3-6行的其他行行
不加-n重复显示

实验前复制/etc/fstab到/mnt下,做以下编辑
这里写图片描述

显示fstab中含:的行

sed -n '/\:/p' fstab

这里写图片描述
显示fstab中以UUID开头的行以及UUID结尾的行

sed -n '/^UUID/p' fstab
sed -n '/UUID$/p' fstab

这里写图片描述
显示fstab中2-5行

sed -n '2,5p' fstab

这里写图片描述
显示fstab中不是4-9行的行
这里写图片描述

d模式:删除

sed '/^UUID/d' fstab      删除fstab中以UUID开始的行
sed '/UUID$/d' fstab      删除fstab中以UUID结尾的行
sed '1,3d'  fstab         删除fstab中1-3行
sed '/UUID/!d' fstab      删除fstab中不是UUID的行
sed '4,6!d' fstab         删除fstab中不是4-6

删除fstab中以UUID开头的行


sed '/^UUID/d' fstab [-n] -n则不显示输出
sed '/UUID$/d' fstab [-n]

这里写图片描述
删除不是UUID开头的行


sed '/^UUID/!d' fstab

这里写图片描述
删除fstab中3-6行
这里写图片描述
删除fstab中不是3-6行的行
这里写图片描述

a模式:增加


sed '/^UUID/a \hello' sed fstab 追加hello到fstab以UUID开头的行后
sed '/UUID$/a hello\n world' sed fatab 增加换行

对于file1和file2
这里写图片描述
追加hello world的到file2符合以test开头的行后中


sed '/^test/a hello world' sed file2

这里写图片描述
追加两行内容第一行hello 第二行world 到file2中以firefox结尾的行后


sed '/firefox$/a hello\nworld' file2

这里写图片描述

c模式:改变


sed '/^UUID/c hello' fstab 改变fatab中所有符合以UUID开头的那一行为hello

对于fatab把符合UUID开头的行替换sed-mode-c


sed '/^UUID/c set-mode-c' fstab

这里写图片描述

w模式:写入


sed ‘/^UUID/w /tmp/fstab.txt’ /etc/fstab (把/etc/fstab 中
UUID 开头的行保存到/tmp/fstab 中)
sed -n‘/^UUID/w /tmp/fstab.txt’ /etc/fstab
sed '/^UUID/=' fstab 显示fstab中以UUID开头的行数和内容,会显示其他不符合条件的行内容
sed -n '/^UUID/=' fstab 显示fstab中以UUID开头的行数,只显示符合条件的行号和内容
sed ‘6r /etc/issue’ /etc/fstab (把/etc/issue 文件内容放置
到/etc/fstab 中的第六行)
sed -e 的用法:将下一个字符串解析为 sed 编辑命令

把/etc/fstab中符合以UUID开头的行保存到/mnt/file1中

sed '/^UUID/w /mnt/file1' /etc/fstab

这里写图片描述
把/etc/fstab中以#开头的行写入保存到file2中,不显示输出内容

sed -n '/^\#/w /mnt/file2' /etc/fstab

这里写图片描述
查看/etc/fstab中以UUID开头的行是第几行

sed '/^UUID/=' fstab
sed '/^UUID/=' fstab -n ##-n表示只输出符合条件的行号和内容

这里写图片描述
把westos中的所有内容放置到file的第4行后
这里写图片描述

i模式:插入


sed '/^UUID/i hello' sed fstab 把hello插入到fstab以UUID开头的行前
sed '/^UUID/i hello\nworld' sed fstab 把hello插入到fstab以UUID开头的行前下一行插入world

把hello 插入到fstab符合以UUID开头的行前

sed '/^UUID/i hello' fstab

这里写图片描述

sed -e 将下一个字符串解析为 sed 编辑命令


sed -e '/^linux/d' -e '/redhat$/a HWLLO' -e '/^westos/c WESTOS' westos 删除westos文件中符合以linux开头的行,然后增加HELLO到以redhat结尾的纳一行后,最后改变以westos开头的行为WESTOS

这里写图片描述

这两条命令是一样的
sed -e '/^linux/d;/redhat$/a HELLO' westos
sed -e '/^linux/d' -e '/redhat$/a HELLO' westos

这里写图片描述

sed的其他用法1:

文本内容的替换

sed 's/#/\*/g' fstab 把fstab中所有的#替换为*
sed 's/\//+/g' fstab 把fstab中所有的/替换为+
sed 's@/@+@g' fstab 把fstab中所有的/替换为+
sed '2s/:/**/g' passwd 把passwd中第2行的:全部替换为**
sed '3,5s/:/#/g' passwd 把passwd中3-5行内容中的:全部替换为#
sed '/adm/,/lp/s/:/-/g' passwd 把passwd中/adm/开始的行到/lp/开始的行,这两行之间的所有行中的:替换为-
sed 's/:/##/' passwd 把passwd中每行的第一个:替换为##
sed 's/:/##/g' passwd 把passwd中全文的:替换为##

实验说明

把/mnt/fstab中的#全文替换*

sed 's/\#/\*/g' fstab

这里写图片描述
把fstab中的所有/替换+

sed 's/\/+/g' fstab ==sed 's@/@+@g' fstab 把fstab中所有的/替换为+

这里写图片描述
把passwd中的第2行中:全部替换@
这里写图片描述
把passwd中3-5行内容中的:全部替换为#

sed '3,5s/:/#/g' passwd

这里写图片描述
把passwd中/adm/开始的行到/sync/开始的行,这两行之间的所有行中的:替换为-

sed '/adm/,/sync/s/:/-/g' passwd

这里写图片描述
把passwd中每行的第一个:替换为##

sed 's/:/#/' passwd

这里写图片描述
把passwd中全文的:替换为$

sed 's/:/\$/g' passwd

这里写图片描述

sed的其他用法二:调整输出内容


sed 'G' file 每一行后加以行空格行
sed '$!G' file每一行后加以行空格行除了在最后一行
sed '=' file 每一行都加行号在内容上边
sed '=' file | sed 'N;s/\n//' 每一行都加行号在内容前边
sed -n '$p' file 显示file的最后一行内容

sed ‘G’ file实验效果每一行后加以行空格行
这里写图片描述
sed ‘$!G’ file实验效果每一行后加以行空格行除了在最后一行
这里写图片描述
sed ‘=’ file 每一行都加行号在内容上边
这里写图片描述
sed ‘=’ file | sed ‘N;s/\n//’ 每一行都加行号在内容前边
这里写图片描述
ed -n ‘$p’ file 显示file的最后一行内容
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值