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  找谁  干啥

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

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

3.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,UFO
107,lee,XO

1)echo

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

2)cat

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

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.2 sed 先备份在修改文件内容

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#(.*)#<\1>#g'

<123456>

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

[[email protected] oldboy]# echo '123456'|sed -r 's#(.*)#<\1>#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.5 sed命令常见的坑  -ri   和  -ir

4.5.1 -r与-i同时使用

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

-ri

正常

-ir

先把文件备份为xxxr

然后再替换文件中的内容

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

会把原文件内容清空

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

时间: 2024-09-30 11:13:35

1.10-linux三剑客之sed命令详解及用法的相关文章

linux三剑客之sed入门详解

sed介绍sed流编辑器(stream editor),在三剑客中排行老二,是一款简单的文本编辑语言.sed并不直接处理源文件,而是逐行读取源文件的内容到内存(称模式空间)中,然后在模式空间中使用sed命令处理,再打印模式空间处理后的内容到标准输出.sed的能够实现的功能:增删改查.替换.过滤.取行.sed文本处理原理图 sed命令的语法:sed [选项] 'AddressCommand [修饰符]'inputfile(输入文件)sed命令语法各参数解释 实验环境 [[email protect

Linux Shell学习-sed命令详解

(1).sed介绍 Sed是流编辑器,stream editor,它是一个将一些列编辑命令作用于一批文本文件的理想工具. (2).sed工作原理 Sed是一个非交互式文本编辑器,它可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘输入.文件重定向.字符串.变量,甚至来自管道的文本. Sed从文本的一个文本行或标准输入中读取数据,将其复制到缓冲区,然后读取命令行或脚本的第一个命令,对此命令要求的行号进行编辑,重复此过程,直到命令行或脚本中的所有命令都执行完毕. 相对于诸如vi等其他文本编辑器

Linux三剑客值awk命令详解

一.awk介绍 AWK是一种优良的文本处理工具.它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识.AWK 提供了极其强大的功能:可以进行样式装入.流控制.数学运算符.进程控制语句甚至于内置的变量和函数.它具备了一个完整的语言所应具有的几乎所有精美特性.实际上 AWK 的确拥有自己的

Linux三剑客之grep命令详解

先来小菜一碟: cat /etc/passwd | grep -c "/bin/bash$" 以上,用来统计/etc/passwd 文件中以/bin/bash结尾的用户个数. grep用来基于正则去实现行过滤的工具:它有很多衍生命令: egrep 扩展的grep,即默认使用扩展正则表达式的grep,更高级. fgrep 专用于文件行过滤的工具. grep命令格式:grep [option] pattern file        option表示选项,pattern 表示要匹配的模式,

2.2 linux sed命令详解

简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. sed使用参数 [[email protected] ~]# sed [-nefr] [动作] 选项与参数

linux 之sed命令详解

sed命令详解 sed是什么 sed是linux文本处理三剑客之一,全称 StreamEDitor,非常著名的行编辑器,功能十分强大. sed的工作过程 sed处理文本时每次从文件复制出来一行,放在工作车间,又叫做模式空间,即pattern space,然后与模式进行匹配.如果复制出来的这一行不能被模式匹配到,就默认把这一行输出至标准输出(如果用户明确指定不输出也可以). 如果能被模式匹配到,就对这行数据进行用户指定的编辑操作,编辑完成后可能输出至标准输出,也可能是用户指定的其他操作.这样第一行

文本处理工具之二 sed命令详解

======博主所学知识来着于恩师马哥的亲授====== 马哥教育"2014夏令营"开始啦!!!马哥教育是目前性价比最高的Linux培训,国内好评度排名第一,并被网友称为Linux界的"黄埔军校",全部课程采用Centos6.5x86_64讲解,经过几期网络班的总结和锤炼,逐渐完善的课程体系,学员学习进度监督和优质的考试系统检验学员掌握程度,活跃的在线答疑环节,名师陪伴,牛人指点,精彩不容错过. 详情猛戳:http://www.magedu.com/ 课程内容:ht

Ubuntu Linux系统下apt-get命令详解

Ubuntu Linux系统下apt-get命令详解(via|via) 常用的APT命令参数: apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明.大小.版本等 sudo apt-get install package 安装包 sudo apt-get install package - - reinstall 重新安装包 sudo apt-get -f install 修复安装"-f = ——fix-missing&

cut\grep\awk\sed命令详解

cut\grep\awk\sed命令详解 1.cut命令详解及实例 (1)作用:提取文件中指定的列 语法格式:cut  选项  文件名   (2)选项作用:      -d 分隔符     按照指定的分割符进行分割      -f 列号       指定提取第几列      -c 字符范围  不依赖分割符来分割,而是通过字符范围进行字段提取      -b 字节数     以字节为单位进行分割.    (3)cut实际应用案例. 例1:cut的-d和-f选项的使用,列出/etc/passwd里面