shell命令-sed常用命令

sed常用命令

sed命令

一个编辑文件的命令,一行一行的处理编辑

大概执行流程如下所示

这里写图片描述

对文件操作,简单的概括是增删改查
PS : 大多数sed命令不会直接操作原文件,先有这样的意识

创建文件 test.txt

HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test

这里写图片描述

a :新增, 新增的单位是以行为单位,例 4a,第四行的下一行新增一行
命令:sed ‘4a jlkj kjkj cera’ test.txt
ps: jlkj kjkj cera是我新增的内容

这里写图片描述

i :新增, 新增的单位是以行为单位,例 4i,第四行的上一行新增一行
命令:sed ‘4i jlkj kjkj cera’ test.txt
ps: jlkj kjkj cera是我新增的内容

这里写图片描述

d :删除, 删除的单位是以行为单位,例 2d,删除第二行
命令:sed ‘2d’ test.txt

这里写图片描述

删除第二行到最后一行
命令:sed ‘2, $d’ test.txt

这里写图片描述

c :替换,替换的单位是以行为单位, 在指定行取代指定的内容
将2-3行替换成 helloword
命令:sed ‘2,3c helloword’ test.txt

这里写图片描述

p:查询,查询的单位是以行为单位, 查询指定行,和 -n 参数一起使用
查询第三行
命令:sed -n ‘3p’ test.txt

这里写图片描述

正则表达式与sed命令

正则表达式规则可参考:http://blog.csdn.net/dengjili/article/details/78009643

查询

/root/ ====> /线中间存放正则表达式,与awk命令正则表达式相似:http://blog.csdn.net/dengjili/article/details/78028946
查询含有is的行
命令:sed -n ‘/is/p’ test.txt

这里写图片描述

查询任意内容的行
命令:sed -n ‘/.*/p’ test.txt

这里写图片描述

增加

在含有linux的下一行添加内容
命令:sed ‘/linux/a test’ test.txt

这里写图片描述

删除

删除含有linux的行
命令:sed ‘/linux/d’ test.txt

这里写图片描述

修改

修改稍微特殊一些,语法类似于vim里面的替换。例如例n1,n2s/word1/word2/g ===> n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2
将linux替换成windows
命令:sed ‘s/linux/windows/g’ test.txt

这里写图片描述

其他命令

多命令参数同时使用

引入-e参数,可以指明多个命令同时使用
将linux替换成windows,再删除第一行
命令:sed -e ‘s/linux/windows/g’ -e ‘1d’ test.txt

这里写图片描述

将linux替换成windows,再显示第四行
命令:sed -e ‘s/linux/windows/g’ -n -e ‘4p’ test.txt

这里写图片描述

ps: 查询要与-n命令一起使用

直接修改源文件

引入-i参数,操作源文件
删除第三行
命令:sed -i ‘3d’ test.txt

这里写图片描述

sed高级参数

简介

sed是面向流的行编辑器。所谓面向流,是指接受标准输入的输入,输出内容到标准输出上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。

具体过程如下: sed将处理的行读入到一个临时缓存区中(也称为模式空间pattern space),sed中的命令依次执行,直到所有命令执行完毕,完成后把该行发送到屏幕上,清理pattern space中的内容;接着重复刚才的动作,读入下一行,直到文件处理结束。

sed每处理完一行就将其从pattern space中删除,然后将下一行读入,进行处理和显示。处理完输入 文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

重要结论:上述命令都是在模式空间pattern space中进行的
流程如下所示
这里写图片描述

引入Hold Space空间

Hold Space空间相当于临时空间,可以与pattern space空间进行数据拷贝

流程如下所示

这里写图片描述

命令含义
g将hold space中的内容拷贝到pattern space中,原来pattern space里的内容被覆盖
G将hold space中的内容append到pattern space后
h将pattern space中的内容拷贝到hold space中,原来hold space里的内容被覆盖
H将pattern space中的内容append到hold space后
d删除pattern中的所有行,并读入下一新行到pattern中
D删除multiline pattern中的第一行,不读入下一行 (这一点笔者未理解)
命令:g

==> 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容被覆盖

这里写图片描述

命令:G

==> 将hold space中的内容append到pattern space后

这里写图片描述

命令:h

==> 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容被覆盖

这里写图片描述

命令:H

==> 将pattern space中的内容append到hold space后

这里写图片描述

命令:d

==> 删除pattern中的所有行,并读入下一新行到pattern中

这里写图片描述

来看一个例子

创建文件 test.txt

this is 1 line
this is 2 line
this is 3 line

这里写图片描述

倒序输出功能

命令:sed ‘1!G;h;$!d’ test.txt

这里写图片描述

解析
  1. 第一行不执行G命令。ps:只有第一行不执行G命令,其他行是要执行G命令
  2. 执行h命令。ps:所有行都执行h命令
  3. 最后一行不执行d命令。ps:只有第一行不执行d命令,其他行是要执行d命令
图解析过程

完整图
这里写图片描述

由于看不清楚,将图分成两部分
左面
这里写图片描述

右面
这里写图片描述

ok啦

可以思考一下输出什么?

创建文本1.txt

1
2
3
4

命令

sed ‘H;g’ 1.txt

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值