Day27 正则中sed工具

sed工具介绍

  • 介绍

sed不仅能够实现如grep的匹配功能,而且还能实现文本替换功能等。

sed的匹配功能

  • 实验概览
 sed -n '5'p test.txt 
 sed -n '1,5'p test.txt
 sed -n '1,$'p test.txt
 sed -n '/root/'p test.txt
 sed -n '/^1/'p test.txt
 sed -n 'in$'p test.txt
 sed -n '/r..o/'p test.txt
 sed -n 'oo*'p test.txt
 sed -e '1'p -e '/111/'p -n test.txt
打印某行
  • 语法sed -n 'n'p fiename

p: 参数p表示打印
-n:只打印我们指定的行,无关选项不加。
不加-n:会在指定行,后面显示所以其他的行。
'n':单引号里的n表示第几行;
'1,$':表示打印所有,**$**表示前面指定1行的后面的所有行
:可以指定一个范围打印,如 sed -n '1,3' test.txt

打印包含某个字符串的行
  • 语法sed -n '/root/'p fiename

//:表示匹配字符串
: 在打印字符串时,在grep中的特殊字符(&*等)同样能在sed中使用 。
-e:加上此选项能够同时实现多个行为。在匹配行的同时匹配一个字符串,若两个不同的表达式,都匹配的是同一个字符串或行,那么将会打印两次。
I,大i 匹配时不区分大小写,如sed -n '/bus/'Ip /etc/passwd

  • 特殊符号+

在sed使用特殊符号+匹配时,需要加脱义符号,如 sed -n '/r+t/'p test.txt;
sed -nr: 加r命令后,就不用加脱义字符

删除某些行或字符串
  • 语法sed '1,20'd /etc/passwd

d,表示删除动作,这个操作不会修改文件的实际内容

  • 直接删除文件选项

-i:会直接删掉文件内容,并且能指定字符串名

sed的替换功能

全局替换
  • 语法:sed '1,10s/root/toor/g' test.txt

参数s:表示替换的动作
参数g:表示本行全局替换,如不加g则替换本行常出现的第一个字符串

  • 替换也是能够使用正则表达式的

如:sed -r '1,10s/ro+/r/g' test.txt :这里因为sed 使用+ 所以用了 -r选项(取消脱义字符)

调换两个字符的位置
  • 示例:准备将途中的两个字符串调换位置,包括后面的所有字符串一起首尾调换

  • 正确命令如下
sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'
  • 解释

1.格式
s//:表示全部,不指定范围就是全部
-r:取消脱义符号
2.在调换前,我们要先用表达式,表答我们需要调换的字符串
s//:表示全部,不指定范围就是全部
[^:]:表示一个非冒号的字符
[^:]+:加号表示一个或多个 ,如root
([^:]+):小括号表示等会我们需要调用括号内的东西;
:表示间隔的特殊符号
. **:表示全部匹配
**(.
):** 表示贪婪匹配,意为直到最后一个冒号为止的字符串
([^:]+):表示一个非零字符串
3.调换位置
\3:\2:\1/:这里的意思是3个字符串的位置;本应该是123 ,但是我们要给他们调换位置,所以变成了321,冒号是间隔符号

  • 注意:脱义或者替换一些分隔符,比如用@,只要能区分开就行
把文档里所有的英文字母删除
  • 实际意义就是替换为空

如:sed 's/[a-zA-Z]//g' test.txt

在所有行前面加上aaa
  • 示例

head test.txt |sed -r 's/(.*)/aaa:&/' &:保存搜索字符用来替换其他字符,如s/asd/&/,asd这成asd

转载于:https://my.oschina.net/u/3707523/blog/1840459

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值