linux shellsed命令,Linux shell基础(五)sed命令

一、sed命令

sed是一种强大的流式编辑器 (stream editor for filtering and transforming text),它能够完美的使用正则表达式,逐行处理文本并把结果显示到屏幕上。sed的强项是替换文本中的特定字符,而写shell有个步骤就是从一段文本中截取一段字符进行处理,所以熟练掌握sed命令是写shell脚本的基本技能。

用法:

sed [选项]... {脚本(如果没有其他脚本)} [输入文件]

sed [options] 'command' file(s)

sed [options] -f scriptfile file(s)

选项:

-p 查找

-d 删除

-s 替换

二、sed 匹配搜索用法

sed可以向grep一样查找文件文本中包含关键字的行并把改行显示在屏幕上。

命令写法:sed -n '/(匹配的字符串)/'p 文件名(简记为-np)

1、搜索passwd文件中包含root关键字的行。

sed -n '/root/'p passwd

ab5b0561b7ba79a38b63ab2a9a0db5b6.png

2、搜索ssh文件中以#开头的行

sed -n '/^#/'p ssh

87767b3cfee4ec8feb5d092c26e016b8.png

3、搜索正则'o+t'类型的行

sed -nr ‘/o+t/’p passwd

c6bd948e7c436bed2b03189a45e65388.png

注意“+”号属于扩展正则,需要跟-r选项才能用

4、搜索正则‘两次o’的行

sed -nr '/o{2}/'p passwd

d3c98ebd142d1c379d33b4cf63edaa3c.png

5、搜索正则root或者bus的行‘root|bus’

sed -nr '/root|bus/'p passwd

e8864e45be700092937108ff0a01096f.png

6、不区分大小写搜索关键字所在的行

sed -n '/nologin/'Ip passwd 注意是大写字母I,不是管道符号|

1e35a594a2ca9c7812fc620b5fa473d2.png

拓展用法:打印指定的行

命令写法:sed -n ‘行号或行号描述’p 文件路径 注意单引号''内不需要跟两个//

1、显示文件第2行内容

sed -n '2'p passwd

df450960c150fcfab7c587096856992e.png

2、显示文件第6行至10行内容

sed -n '6,10'p passwd 注意中间是逗号,不是-

fed5f7dc1aa7fe4fc683fb1effa292c8.png

3、全文显示

sed -n '1,$'p passwd 注意不能写成“sed -n '^,$'p passwd”

463a16764903fd190cf01c25e3ff7543.png

拓展用法: 多条件过滤

命令可以用-e参数匹配多个条件,注意多个条件是或者关系,只要符合其中的一条就会被找到,如果匹配两条规则,那么改行会显示两次

显示第一行和含有root关键字的行

sed -e '/root/'p -e '1'p -n passwd

dcf8fdf395ef9d942b4bfc240736b489.png

三、sed删除特定行用法

对特定大文件,使用sed命令删除部分内容,要比vim去打开相应的文件再删除要实用的多。没有加-i选项的删除只是显示上的删除,不会影响文件本身的内容,但加了-i选项后会作用于原始文件,所以删除前一定要做好备份。

命令写法:sed '/(关键字)/'d 文件路径

1、删除文件的第一行

sed '1'd 1.txt

3a377c661d2b1b3679b068265fed5115.png

注意第一行已经被删掉了

2、删掉含关键字“bus”的行

sed '/bus/'d 1.txt

dc00dcd97059f66302e7ecfc900e2c6e.png

3、删掉特定时间段之前的文件的思路

首先用grep -n >命令通过时间关键字过滤出行数。

然后使用sed '1,找到的最后行行号‘d 方式删除数据

四、sed替换特定内容用法

命令写法:

sed '1,$s///g' 文件路径

1、替换文件前10行中的ro+为R

sed -r '1,10/ro+/R/g' 1.txt

0fe71b30de180ff8bac1d93d39cb3de2.png

2、替换文件中的数字为空,其实就是删掉文件中所有的数字

sed 's/[0-9]//g' 1.txt

9a05c9e5bb0f0497ef3716b45d619617.png

这个命令经常被用来判断输入的内容是否是数字

3、替换文件中的字母为空,其实就是删掉文件中所有的英文字母

sed 's/[a-zA-Z]//g' 文件名 (复习tr 命令 tr [a-z] [A-Z])

c899340ee37053e6517a575d4516c8a6.png

4、在所有行前面加上字符串123

小括号为扩展正则符号,使用时要加-r选项。

sed -r 's/(.*)/123&/g' test.txt

10186dd72492674ccefb7d45010d2c6d.png

五、sed调换字符串次序用法

替换文字的顺序的关键是要用合适的正则

小括号内容在下文中可以

命令写法:

sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1:/' test.txt |head -n5

841537740f7634b6dd6dd42d529f6a86.png

该操作的难点在于分段的正则的写法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值