sed与grep正则

 string editor  流编辑器

    sed编辑器是一行一行的处理内容,正在处理的内容存放在缓冲区内,处理完后

按照选项的规定进行输出或者修改文件

option:
-n静默模式结合p可以只输出修改行,读取指定行数
-e   多操作指令
-f    运行脚本
-i  修改文件
-i.bak  修改同时备份.bak文件
-r  使用扩展正则
command:
a追加
i插入
p打印
d删除
r/R读取文件/一行
w存档
s查找
c替换
y替换
h/H复制拷贝/追加缓冲区到存放空间
g/G  粘贴 从存放空间取回/追加到模式空间
x  两个空间内容交换
n/N拷贝/追加下一行内容到当前
D删除\n之前的内容
P打印\n之前的内容
b  无条件跳转
t  满足匹配后的跳转
T不满足匹配时的跳转

 

 

 

 常用用法: 

sed 's/root/rooot/g'  /etc/passwd          #将root替换成rooot,并标准输出

sed 's/root/rooot/g' /etc/passwd > /etc/passwd   #将替换结果作为文件修改(谨慎使用,注意备份)

sed -i 's/root/rooot/g' /etc/passwd         #将替换结果作为文件修改

 

 

输出第三行 

sed -n '3p' /etc/passwd

-n抑制输出,如果不加上p打印的话,修改行是不会输出显示出来的

 

输出前三行

sed -n '1,3p' /etc/passwd
head -3 /etc/passwd

 

输出第一行和第三行

nl /etc/passwd | sed -n -e "1p" -e "3p"

 

输出前三行之外的行

sed -n '1,3!p'

注意使用单引号,防止!p转义

 

输出第三行及其之后的三行

nl passwd | sed  -n '3,+3p'

 

 

将文本每行最后七个字符换成!号

sed   -n  's#.\{7\}$#!#p' ooo

在文本的每一行前添加#符号,此时不要开启静默模式-n

sed  's/^.\?/#&/' passwd

&  替代符 替代前面所匹配的

?  数量符  需要转义 表示1个或0个

/  分隔符  此处三个都是 可以用别的符号代替,避免冲突,下面是一个斜线冲突避免的例子

sed 's_/bin/bash_/sbin/nologin_'  /etc/passwd

 

将某个目录下所有文件文本中的kkkkk 换成 ddddd

sed -i 's/kkkkk/ddddd/g' `grep kkkkk -rl mydir` 

grep 中  -r递归几层

 

 截取文本中的某一段(IP地址)并存放与文件中

cat eth0 | sed 's/.*t addr://' | sed 's/ Bc.*//' |xargs echo > ech0

sed  -i  -e  's/.*t addr://'   -e  sed 's/B.*//'  eth0

 

 

.*  表示任意字母任意数量

-e  表示多点编辑

-i   表示修改文件

 

删除第6行到最后一行

sed   '6,$d'  file

 

删除第1行 和 第3行

sed   -e  '1d'  -e '3d'  file

 

第3行上面插入两行

sed '3i hello world \

>the text' file     

 

第4行下追加一行

sed  "4a Hello world" passwd

 

替换行

sed '3c33333333'  file    #替换第三行

 

保存apache配置文件中的非注释行

sed -n '/^[^#]/w apache.conf' /etc/apache2/apache2.conf

 

对字符操作

把file中的包含root的行删除

sed  '/root/d'  file    

显示包含某些字符的行

sed -n '/root/n'  file   

检索行并于此执行命令 命令间分好隔开

sed -n  '/root/{s/bash/bullet;p;q}'  file  #将含有root的行上把bash改成bullet并输出

s替换 p打印 q退出

 

 

Grep的正则匹配

匹配空行

grep -n ^$  file

 

匹配非空行

grep -n -v ^$ file

 

匹配单引号

grep \' /etc/services  --color

grep "'" /etc/services --color

 

模糊匹配,星号表示前一个字母零个或多个

grep -n spo* /etc/passwd --color

 

匹配ga或者ge

grep g[ae] /etc/passwd --color

 

匹配非注释行

grep -v \# /etc/apache2/apache2.conf

grep ^[^#] /etc/apache2/apache2.conf --color

注意上面两个语句都可以匹配非注释行,但第一个语句绘保留空行,第二个不会

 

字符数量匹配

grep -n "o\{2,3\}" /etc/passwd

注意转义需要引号

 

单词精确匹配

grep "\<spool\>" /etc/passwd --color

 

 

最后的小插曲

cat -n 与 nl 的区别,实践出真知!

转载于:https://www.cnblogs.com/demonxian3/p/6289589.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值