正则表达式 三剑客--sed

Posted 木子小世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式 三剑客--sed相关的知识,希望对你有一定的参考价值。

三剑客包含:grep  sed  awk,此章节为sed

相比于grep过滤查询,sed除查询外,更偏向处理数据,实际工作中,在大型文件不适合打开编辑再保存的前提下用sed直接修改某一处更加简便,也避免了大型文档修改保存时间长有数据丢失的情况。

sed工作原理

sed 是一种在线的、非交互式的编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

正则表达式


特点

( 1)非交互,基于模式匹配的过滤及修改文本。

(2)逐行处理,太大的文件使用sed会显得格外有优势。

(3)可实现对文本的输出、删除、替换、复制、剪切、导入、导出等各种编辑。

(4)脚本化,在Shell脚本编程中使用sed比vim方便。

sed命令常见选项

-n

静默模式,屏幕不再全部显示,只显示经过sed特殊处理的那一行

-e

允许在该选项后加一条新的编辑指令

-f

将sed的操作写在一个文件内

-r

支持扩展正则表达式           -I   正则

-i

直接修改读取的文件内容 而不是由屏幕输出 用于编辑修改

-h

输出帮助信息

常见command选项

a\\

新增,a后可以接字串,字串会在下一行出现  \\是转义回车的作用

sed -r 2a\\ 1111\\   3333333\\     444444 passwd        第2行开始加入这3行

c\\

替换整行或多行 

# sed -r 2caaaaaaaa passwd    将第二行替换为aaaaaaa

d

删除

# sed -r 3,$d passwd  删除第三行到最后一行

i\\

插入内容  

# sed -r 2iaaaaaaaa passwd  在原本第二行之前插入这行aaaaaa

p

打印,由于默认就会输出处理后的内容所以加了打印会每一行输出两次?   

s

查找替换

# sed -r s/root/aofa/g passwd   替换全部root

n

获取下一行输入行,用下一个命令处理新的行而不是第一个命令

反向选择未选定的行

暂存空间hHGg

暂存和取用命令:h覆盖暂存空间 H追加暂存空间 g覆盖行 G追加行

正则表达式

实战举例

# sed -r /^#/d /etc/samba/smb.conf

删除配置文件中#号注释行

# sed -r /^[ \\t]*$/d space.txt

删除无内容空行

# sed -ri $a\\chroot_local_user=YES /etc/vsftpd/vsftpd.conf

在最后一行后新插入一行新字符串

# sed -r 2,6s/^/#/ a.txt

找到2到6行,把开始换成#

# sed -r "1a$var1" /etc/hosts

sed中使用外部变量

# sed -r /^bin/5,d space.txt

以bin开头的行 删除到第5行

# sed -r /root/!d space.txt

除root外的其他行都删除

# sed -r 1~2d space.txt

删除所有奇数行,从1行开始每隔2行删除

# sed -r ‘1,5s/(.*)/#\\1/ space.txt

指定行前边加#号

# sed -r /adm/n;s/sbin/uuu/ space.txt

n获取下一行 搜索adm的下一行把sbin替换成uuu

# sed  ’1!G;h;$!d‘ space.txt

将txtx文件内容倒序,原文本行顺序倒写


以上是关于正则表达式 三剑客--sed的主要内容,如果未能解决你的问题,请参考以下文章

grep与正则表达式

grep与正则表达式:

4.grep与正则表达式

grep与正则表达式

文本三剑客之sed

文本三剑客之sed