shell脚本 sed工具

sed(stream editor)流编辑器,Linux下一款功能强大的非交互流式文本编辑器,

(vim式交互式文本编辑器),可以对文本文件的每一行数据匹配查询之后

进行增删改查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,

适合大文件的编辑

一次处理一行内容, 将这行放入缓存(存区空间称为:模式空间),

然后才对这行进行处理,处理完后,将缓存区的内容发送到终端。

选项参数功能
-e直接在指令列模式上进行sed的动作编辑。它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项;一行命令语句可以执行多条sed命令
-i直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
-f后跟保存了sed指令的文件
-n取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
-r ruguler使用扩展正则表达式,默认情况sed只识别基本正则表达式 *
命令功能描述
aadd新增,a的后面可以接字串,在下一行出现
cchange更改, 更改匹配行的内容
ddelete删除, 删除匹配的内容
iinsert插入, 向匹配行前插入内容
pprint打印, 打印出匹配的内容,通常与-n选项和用
ssubstitute替换, 替换掉匹配的内容
=用来打印被匹配的行的行号
n读取下一行,遇到n时会自动跳入下一行

向文件中添加数据

sed '3ahello' sed.txt        向第三行后添加hello

sed '3ihello' sed.txt         向第三行前添加hello

这里并未修改源文件         添加-i命令修改源文件         sed -i '3ahello' sed.txt

sed '/abc/ahello' sed.txt        向abc后面添加 hello,若文件中多行包括abc,则每行后都会添加

sed '/abc/ihello' sed.txt        /是通配符 向文件中所有abc的 前面添加hello

sed '$ahello' sed.txt        $表示最后一行 在最后一行后添加 hello

sed '$ihello' sed.txt        最后一行前添加 hello

删除文件中的数据

sed '2d' sed.txt        删除该文件的第二行

sed '1d;4d' sed.txt         删除第1,4行

sed '1~2d' sed.txt         删除奇数行,从第一行开始删除,每个两行删掉一行

sed '1,3d' sed.txt         删除指定范围行数据。删除第1到3行数据

sed '1,3!d' sed.txt         对1,3! 取反进行删除,除去1到3行的数据,删除剩下行数据

sed '$d' sed.txt         删除最后一行数据

sed '/abc/d' sed.txt         删除匹配abc的行数据

sed '/abc/,$d' sed.txt         删除匹配行 到 最后一行的数据

sed '/abc/,+1d' sed.txt        删除匹配行及其下一行的数据

sed '/abc\|adc/!d' sed.txt         删除不匹配abc 或 adc 的行数据

 这里的 | 或  需要转义  \|        !取反

更改文件数据

sed  '1chello'  sed.txt        修改文件第一行为hello

sed  '/abc/chello' sed.txt        将包含abc的行修改为hello

sed '$chello' sed.txt        将最后一行修改为hello

sed 's/abc/hello/'  sed.txt        将文件中abc 替换为hello         默认替换每行第一个abc

sed 's/abc/hello/g'  sed.txt        将文件中所有abc替换        g表示匹配全局符合的字符

sed 's/abc/hello/2' sed.txt         将每行匹配的第二个替换为hello

sed 's/abc/hello/2w sed2.txt' sed.txt        将每行中第二个匹配的itheima替换为hello , 将替换后的内容写入到sed2.txt文件中        w命令写入

sed -n 's/abc/hello/2pw sed2.txt' sed.txt           

sed '/i/s/t.*//g' sed.txt        正则表达式匹配替换,t.* 表示 t后面的所有字符,不限个数

匹配有 i 的行,替换匹配行中 t 后的所有内容为空

sed 's/$/& test' sed.txt        每行末尾拼接test

sed 's/^/#/' sed.txt        每行行首添加注释 #

查询文件 或 管道中的数据

sed -n '/abc/p' sed.txt        查询含有 abc 的行数据

ps -aux | sed -n '/sshd/p'        管道过滤查询

sed -e '1d' -e 's/abc/adc/g' sed.txt         执行多个sed程序命令,删除第1行,替换abc为adc全部

sed  '1d;s/itheima/itcast/g' sed.txt                方式2

sed高级用法,缓存区数据交互

  1. 首先需要明白, sed处理文件是逐行处理的, 即读取一行处理一行,输出一行;

  2. sed把文件读出来每一行存放的空间叫模式空间, 会在该空间中对读到的内容做相应处理;

  3. 此外sed还有一个额外的空间即暂存空间, 暂存空间刚开始里边只有个空行, 记住这一点;

  4. sed可使用相应的命令从模式空间往暂存空间放入内容或从暂存空间取内容放入模式空间;

h模式空间里面的内容复制到暂存空间缓存区(覆盖方式)
H模式空间里面的内容复制到暂存空间缓存区(追加方式)
g暂存空间里面的内容复制到模式空间缓存区(覆盖方式)
G暂存空间里面的内容复制到模式空间缓存区(追加方式)
x交换2个空间的内容

sed '1h;$G' sed.txt        第一行粘贴到最后一行
# 1h 从模式空间中将第一行数据复制到暂存空间(覆盖方式)
# $G 将暂存空间中的内容复制到模式空间中最后一行(追加方式)

sed '1{h;d};$G' sed.txt        第一行删除后粘贴到最后一行
# 1{h;d}对模式空间中的第一行数据 进行复制到暂存空间(覆盖方式)和删除模式空间中的第一行

sed '1h;2,$g' sed.txt        第一行数据复制 粘贴替换其他行

sed '1,3H;$G' sed.txt        前三行数据复制粘贴到最后一行

sed G -i sed.txt        G暂存空间内容复制到模式空间,暂存空间有空行,完成每行添加空行的操作
# G 每行后面添加一个空行
# -i 修改源文件

sed -i '/^$/d' sed.txt        -i 修改源文件, ^表示文件第一行,$表示文件最后一行, d表示删除,

^$之间什么也没有表示 删除所有空行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值