sed的基础操作

              sed

一、sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

二、sed命令格式

  sed [options] 'command' file

  sed [选项] ‘条件’ 文件路径

三、sed的增删改查

  环境

cat >> test.txt <<EOF
> 01 oldboy CEO
> 02 Alex   CEO02
> 03 oldgirl CEO small wife
> EOF

sed的选项

a\ 在当前行下面插入文本。
i\ 在当前行上面插入文本。
c\ 把选定的行改为新的文本。
d 删除,删除选择的行。
D 删除模板块的第一行。
s 替换指定字符
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
r file 从file中读行。
! 取反 
= 打印当前行号码。  

查:

查看单行

[root@timo ~]# sed -n '1p' test.txt 

01 oldboy CEO

查看多行

[root@timo ~]# sed -n '1,2p' test.txt 

扫描二维码关注公众号,回复: 5026191 查看本文章

01 oldboy CEO

02 Alex   CEO02

查询连续的内容(查询内容包括oldboy 以及 oldfirl 中间的所有内容 连续的)

[root@timo ~]# sed -n '/oldboy/,/oldgirl/p' test.txt 

01 oldboy CEO

02 Alex   CEO02

03 oldgirl CEO small wife

 

查询不连续的内容

[root@timo ~]# sed -n '/oldboy/p;/oldgirl/p' test.txt 

01 oldboy CEO

03 oldgirl CEO small wife

查看以03开头的

[root@timo ~]# sed -n '/^03/p' test.txt 

03 oldgirl CEO small wife

查看以O结尾的                                                                                                     

[root@timo ~]# sed -n '/O$/p' test.txt 

01 oldboy CEO

正则查询(-r 支持拓展正则)

[root@timo ~]# sed -rn '/[d]/p' test.txt 

01 oldboy CEO

03 oldgirl CEO small wife

增:

在第二行下插入

[root@timo ~]# sed '2a 022 wsir DSB' test.txt 

01 oldboy CEO

02 Alex   CEO02

022 wsir DSB

03 oldgirl CEO small wife

在第二行上插入

[root@timo ~]# sed '2i 022 wsir DSB' test.txt 

01 oldboy CEO

022 wsir DSB

02 Alex   CEO02

03 oldgirl CEO small wife

在最后一行插入

[root@timo ~]# sed '$a 022 wsir DSB' test.txt 

01 oldboy CEO

02 Alex   CEO02

03 oldgirl CEO small wife

022 wsir DSB

在多行下插入

[root@timo ~]# sed '1,3a **********' test.txt 

01 oldboy CEO

**********

02 Alex   CEO02

**********

03 oldgirl CEO small wife

**********

删:

删除单行

[root@timo ~]# sed '1d' test.txt 

02 Alex   CEO02

03 oldgirl CEO small wife

删除多行

[root@timo ~]# sed '1,2d' test.txt 

03 oldgirl CEO small wife

根据内容删除

[root@timo ~]# sed '/Alex/d' test.txt 

01 oldboy CEO

03 oldgirl CEO small wife

[root@timo ~]# sed '/old/d' test.txt 

02 Alex   CEO02

根据多个内容进行删除

sed -i '1i 00 wsir XXX' test.txt 

增加一条记录 -i 进行保存

[root@timo ~]# sed -r '/Alex|wsir/d' test.txt 

01 oldboy CEO

03 oldgirl CEO small wife

取反!

添加空行 用\\表示空行

[root@timo ~]# sed -i '1a  \\' test.txt 

查询不是空行的内容

[root@timo ~]# sed -n '/^$/!p' test.txt 

00 wsir XXX

01 oldboy CEO

02 Alex   CEO02

03 oldgirl CEO small wife

对比 查询空行(=表示查询内容所在行号

[root@timo ~]# sed -n '/^$/=' test.txt 

2

[root@timo ~]# sed -n '/^$/p' test.txt 

 

工作中经常用到删除空行

[root@timo ~]# sed '/^$/d' test.txt

00 wsir XXX

01 oldboy CEO

02 Alex   CEO02

03 oldgirl CEO small wife

改:

对一个字段进行替换 sed 's#原数据#替换数据#g' file

[root@timo ~]# sed 's#Alex#xxx#' test.txt 

00 wsir XXX

 

01 oldboy CEO

02 xxx   CEO02

03 oldgirl CEO small wife

对一行进行替换

[root@timo ~]# sed -e '1c xxxx' test.txt 

xxxx

 

01 oldboy CEO

02 Alex   CEO02

03 oldgirl CEO small wife

正则匹配替换

[root@timo ~]# sed -r 's#([0-9]{2})#xxx#' test.txt 

xxx wsir XXX

 

xxx oldboy CEO

xxx Alex   CEO02

xxx oldgirl CEO small wife

注意事项:

工作中-i进行更改时可与.aki同时使用避免误操作导致无法复原

[root@timo ~]# sed -i.bak '1a ******' test.txt 

[root@timo ~]# ls

test.txt

test.txt.bak

[root@timo ~]# cat test.txt

00 wsir XXX

******

 

01 oldboy CEO

02 Alex   CEO02

03 oldgirl CEO small wife

[root@timo ~]# cat test.txt.bak 

00 wsir XXX

 

01 oldboy CEO

02 Alex   CEO02

03 oldgirl CEO small wife

[root@timo ~]# 

-i与-n不能同时使用 使用会造成文件内容只剩下你修改的那一行

测试时-in无问题正常 -ni时 效果如下,为避免损失请勿同时使用

[root@timo ~]# cat test.txt

01 oldboy CEO

02 Alex   CEO02

03 oldgirl CEO small wife

[root@timo ~]# sed -ni 's#Alex#XXX#' test.txt

[root@timo ~]# cat test.txt

[root@timo ~]# 

[root@timo ~]# 

猜你喜欢

转载自www.cnblogs.com/qiang-qiang/p/10306180.html
今日推荐