linux三剑客之sed命令,1.10-linux三剑客之sed命令详解及用法

内容:

1.sed命令介绍

2.语法格式,常用功能

查询  增加  替换 批量修改文件名

第1章sed是什么

字符流编辑器 Stream Editor

第2章sed功能与版本

处理出文本文件,日志,配置文件等

增加,删除,修改,查询

sed  --version

sed  -i 修改文件内容

第3章语法格式

3.1语法格式

sed [选项] [sed指令] [输入文件]

sed -i.bak 's#oldboy#oldgril#g' oldbboy.txt

先备份在修改

-i   ---sed的参数

修改

-s    --sed指令

g   ---小尾巴/修饰

sed  找谁  干啥

找谁----条件(查找)

干啥----命令  替换 删除  增加

linux三剑客之sed命令,1.10-linux三剑客之sed命令详解及用法_第1张图片

3.2命令执行过程

linux三剑客之sed命令,1.10-linux三剑客之sed命令详解及用法_第2张图片

sed 特性:默认输出

-n 取消默认输出

模式空间:内存中专门为sed腾出的一块地

第4章常用功能

4.1查询:

4.1.1#单行-行号

显示第几行

[[email protected] oldboy]# sed -n '3p' person.txt

103,Alex,COO

显示包含oldboy的行

#包含oldboy的行

[[email protected] oldboy]# sed -n '/oldboy/p' person.txt

101,oldboy,CEO

‘//’//内支持正则表达式         过滤内容

4.1.2多行 连续

找出第1到3行

sed -n‘1,3p  person.ttx’

#显示包含oldboy的行到包含yy的行

[[email protected] oldboy]# sed -n '/oldboy/,/yy/p' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

显示文件的第1,4,5行

[[email protected] oldboy]# sed -n '1p;4p;5p' person.txt

101,oldboy,CEO

104,yy,CFO

105,feixue,CIO

同一行多条命令用;(分号)分隔

小结:

1.行号

2.正则表达式‘//p’

3.范围‘/oldboy/,/yy/’

4.2增加

4.2.1多行增加:  \n 换行符(三种方法)

1.文件的最后一行增加两行106,wuxingge,UFO107,lee,XO

1)echo

echo -e "106,wuxingge,UFO\n107,lee,XO" >>person.txt

2)cat

[[email protected] oldboy]# cat >>person.txt <

106,wuxingge,UFO

107,lee,XO

ha

3)sed    行号a在文件中某一行追加内容

[[email protected] oldboy]# sed  '$a106,wuxingge,UFO\n107,lee,XO' person.txt   最后一行

a ===  append     追加--下一行

i ==== insert       插入-----上一行

错误

[[email protected] oldboy]# sed '2a gyf is a student\nhe's a good boy' person.txt

> ^C

三个单引号乱了

解决:单引号换双引号

删除    d      一行

4.2.2不显示文件中空行

grep -v '^$' person.txt

sed '/^$/d' person.txt

awk '!/^$/' person.txt

sed -n '/^$/!p' person.txt

!(叹号) sed  awk  find中表示取反

4.3替换

4.3.1不加g  将每一行中第一处匹配的字符串进行替换

[[email protected] oldboy]# cat person.txt

101,oldboy,CEO

[[email protected] oldboy]# sed 's#[1-9]#AAA#g' person.txt|egrep -v '^$'

AAA0AAA,oldboy,CEO

加g --global  每一行进行全部替换---> sed指令s的替换标志之一(全局替换)

[[email protected] oldboy]# sed 's#[1-9]#AAA#' person.txt|egrep -v '^$'

AAA01,oldboy,CEO

4.3.2sed 先备份在修改文件内容

sed  -i.bak‘s#[1-9]#AAA#g’person.txt

先把文件备份为person.txt.bak

然后再修改文件内容

4.3.3变量替换     双引号识别     ###  把###之间定义变量

[[email protected] oldboy]# x=oldboy定义x   y 两个变量

[[email protected] oldboy]# y=oldgirl

[[email protected] oldboy]# sed "s#$x#$y#g" person.txt$x   $y    应用变量

101,oldgirl,CEO

102,zhangyao,CTO

2.后项引用

1)把匹配到的内容按规定格式形式

[[email protected] oldboy]# echo '123456'|sed -r 's#(.*)##g'

<123456>

2)引用前面匹配到的内容

[[email protected] oldboy]# echo '123456'|sed -r 's#(.*)##g'

<123456>

新方法 :&表示前面正则匹配到的内容

[[email protected] oldboy]# echo '123456'|sed 's#.*##g'

<123456>

前面每个数字都加上< >号

[[email protected] oldboy]# echo '123456'|sed 's#.##g'

<1><2><3><4><5><6>

4.4新案列:批量修改文件名    命令的拼接

把.jpg修改为.avi

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy01.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy02.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy03.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy04.jpg

-rw-r--r--. 1 root root 0 Jan 10 00:24 oldboy05.jpg

4.4.1方法一:命令拼接

[[email protected] oldboy]# ls *.jpg|sed -r 's#(.*)jpg#mv & \1avi#g'

mv oldboy01.jpg oldboy01.avi

mv oldboy02.jpg oldboy02.avi

|bash   把前面的输出交给bash(命令解释器)执行

[[email protected] oldboy]# ls *.jpg|sed -r 's#(.*)jpg#mv & \1avi#g'|bash

[[email protected] oldboy]# ls *.avi

oldboy01.avi  oldboy03.avi  oldboy05.avi  oldboy07.avi  oldboy09.avi

oldboy02.avi  oldboy04.avi  oldboy06.avi  oldboy08.avi  oldboy10.avi

小结:

1.命令拼接--解决不会循环

2.先在屏幕上拼接出目标命令--最终交给bash执行

4.4.2方法二:rename

rename  from                 to                file

你要替换的内容       替换成什么        替换哪些文件

jpg                  avi                *.jpg

[[email protected] oldboy]# rename jpg avi *.jpg

[[email protected] oldboy]# ls *.avi

oldboy01.avi  oldboy03.avi  oldboy05.avi  oldboy07.avi  oldboy09.avi

oldboy02.avi  oldboy04.avi  oldboy06.avi  oldboy08.avi  oldboy10.avi

sed用法小结:

1.排除!

2.特殊符号===获取行号=

3.一条sed语句执行多条命令;

4.5sed命令常见的坑-ri和-ir

4.5.1-r与-i同时使用

***-r参数必须在前面

-ri

正常

-ir

先把文件备份为xxxr

然后再替换文件中的内容

4.5.2-i禁止与-n一起使用

会把原文件内容清空

原文:http://blog.51cto.com/13517084/2069075

你可能感兴趣的:(linux三剑客之sed命令)