sed命令的使用

介绍

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

软件功能与版本

sed命令是操作、过滤和转换文本内容的强大工具,常用功能有增删改查,其中查询的功能中最常用的2大功能是过滤(过滤指字符串),取行(取出指定行)

查看一下sed版本

[[email protected] ~]# cat /etc/redhat-release

CentOS release 6.8 (Final)

[[email protected] ~]# sed --version

GNU sed version 4.2.1

语法格式

sed [options] [sed-commands] [input-file]

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

选项说明


sed-commands

[sed 命令]


解释说明


a


追加,在指定行后添加一行或者多行文本


c


取代指定的行


d


删除指定的行


D


删除模式空间的部分内容,直到遇到换行符\n结束操作,与多行模式相关


i


插入,在指定行前添加一行或多行文本


h


把模式空间的内容复制到保持空间


H


把模式空间的内容追加到保持空间


g


把保持空间的内容复制到模式空间


G


把保持空间的内容追加到模式空间


x


交换模式空间和保持空间内容


l


打印不可见的字符


n


清空模式空间的内容并读入下一行


N


不清空模式空间,并读取下一行数据并追加到模式空间


p


打印模式空间的内容,通常p会与选项-n 一起使用


P(大写)


打印模式空间的内容,直到遇到换行符\n结束操作


q


退出sed.


r


从指定文件读取数据


s


取代,s#old#new#g==>这里g是s命令的替换标志,注意和g命令区分


w


另存,把模式空间内容保存到文件中


y


根据对应位置转换字符


:label


定义一个标签


b label


执行该标签后面的命令


t


如果前面的命令执行成功,那么就跳转到t指定的标签处,继续往下执行后续命令。否则,仍然继续正常的执行流程。


特殊符号


解释说明



对指定行以外的所有行应用命令


=


打印当前行行号


~


“First~Step”表示出First行开始,以步长Step递增


&


代表被替换的内容



实现一行命令语句可以执行多条sed命令


{}


对单个地址或地址范围执行批量操作


+


地址范围中用到的符号,做加法运算

使用范例

统一实验文本

cat >person.txt<<EOF

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

EOF

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

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

常用功能--增删改查

单行增加

a追加

[[email protected] tmp]# sed ‘2a aaaaaaaaaaaa‘ /tmp/person.txt

101,oldboy,CEO

102,zhangyao,CTO

aaaaaaaaaaaa

103,Alex,COO

104,yy,CFO

105,feixue,CIO

i插入

[[email protected] tmp]# sed ‘2i aaaaaaaaaaaa‘ /tmp/person.txt

101,oldboy,CEO

aaaaaaaaaaaa

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

多行增加

首先我们需要一个特殊符号“\n”,这个符号叫做换行符

[[email protected] ~]# echo "oldboy";echo "oldboy"

oldboy

oldboy

[[email protected] ~]# echo -e "oldboy \noldboy"

oldboy

oldboy

[[email protected] ~]# sed ‘2a 106,yanghao \n107,lidao‘ /tmp/person.txt

101,oldboy,CEO

102,zhangyao,CTO

106,yanghao

107,lidao

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[[email protected] tmp]# sed ‘2i 106,dandan,CSO\n107,bingbing,CCO\n108\n109‘ person.txt

101,oldboy,CEO

106,dandan,CSO

107,bingbing,CCO

108

109

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

指定执行的地址范围


地址范围


含义


10{sed-commands}


对第10行操作


10,20{sed-commands}


对10到20行操作,包括第10,20行


10,+20{sed-commands}


对10到30(10+20)行操作,包括第10,30行


1~2{sed-commands}


对1,3,5,7.......行操作


10,${sed-commands}


对10到最后一行($代表最后一行)操作,包括第10行


/oldboy/{sed-commands}


对匹配oldboy的行操作


/oldboy/,/Alex/{sed-commands}


对匹配oldboy的行到最后匹配Alex的行操作


/oldboy/,10{sed-commands}


对匹配oldboy的行到第10行操作


1,/Alex/{sed-commands}


对第1行到匹配Alex的行操作


/oldboy/,+2{sed-commands}


对匹配oldboy的行到其后的2行操作


/oldboy/,${sed-commands}


对匹配oldboy的行到最后一行操作

单行进操作

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

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[[email protected] tmp]# sed ‘2d‘ person.txt

101,oldboy,CEO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

多行进行操作

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

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[[email protected] tmp]# sed ‘2,5d‘ person.txt

101,oldboy,CEO

[[email protected] tmp]#

删除不连续的行

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

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[[email protected] tmp]# sed ‘2d;5d‘ person.txt

101,oldboy,CEO

103,Alex,COO

104,yy,CFO

使用正则的方法

[[email protected] tmp]# sed ‘/oldboy/d‘ person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[[email protected] tmp]# sed ‘/101/,/104/d‘ person.txt

105,feixue,CIO

整行替换c

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

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[[email protected] tmp]# sed ‘2c 106,yanghao,CSO‘ person.txt

101,oldboy,CEO

106,yanghao,CSO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

文本替换

sed命令,选项;

“s”:单独使用--》将每一行中第一处匹配的字符串进行替换

“g”:每一行进行全部替换--》sed命令s的替换标志之一(全局替换),非sed命令

“i”:修改文件内容--》sed软件的选项,注意和sed命令区分。

g 表示行内全面替换。

p 表示打印行。

w 表示把行写入一个文件。

x 表示互换模板块中的文本和缓冲区中的文本。

y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)

\1 子串匹配标记

& 已匹配字符串标记

[[email protected] tmp]# sed ‘s#o#@#‘ person.txt

101,@ldboy,CEO

102,[email protected],CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[[email protected] tmp]# sed ‘s#o#@#g‘ person.txt

101,@[email protected],CEO

102,[email protected],CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

变量替换

[[email protected] tmp]# x=1

[[email protected] tmp]# echo "$x"

1

[[email protected] tmp]# y=2

[[email protected] tmp]# sed "s#$x#$y#g" person.txt

202,oldboy,CEO

202,zhangyao,CTO

203,Alex,COO

204,yy,CFO

205,feixue,CIO

“p”print打印 输出指定内容,但默认会输出2次匹配的结果,因此使用-n选项取消默认输出

[[email protected] tmp]# sed -n ‘2p‘ person.txt

102,zhangyao,CTO

[[email protected] tmp]# sed -rn ‘/oldboy|yy/p‘ person.txt

101,oldboy,CEO

104,yy,CFO

企业案例:批量重命名文件

[[email protected] tmp]# touch  stu_102999_{1..5}_finished.jpg

[[email protected] tmp]# ll

total 8

-rw-r--r--. 1 root root 40 Feb 22 16:07 num.txt

-rw-r--r--. 1 root root 71 Feb 22 15:58 person.txt

-rw-r--r--. 1 root root  0 Feb 22 21:18 stu_102999_1_finished.jpg

-rw-r--r--. 1 root root  0 Feb 22 21:18 stu_102999_2_finished.jpg

-rw-r--r--. 1 root root  0 Feb 22 21:18 stu_102999_3_finished.jpg

-rw-r--r--. 1 root root  0 Feb 22 21:18 stu_102999_4_finished.jpg

-rw-r--r--. 1 root root  0 Feb 22 21:18 stu_102999_5_finished.jpg

[[email protected] tmp]# ls stu*|sed -r ‘s#(.*)(_finished)(.*)#mv & \1\3#g‘

mv stu_102999_1_finished.jpg stu_102999_1.jpg

mv stu_102999_2_finished.jpg stu_102999_2.jpg

mv stu_102999_3_finished.jpg stu_102999_3.jpg

mv stu_102999_4_finished.jpg stu_102999_4.jpg

mv stu_102999_5_finished.jpg stu_102999_5.jpg

[[email protected] tmp]#ls stu*|sed -r ‘s#(.*)(_finished)(.*)#mv & \1\3#g‘|bash

[[email protected] tmp]# ll

total 8

-rw-r--r--. 1 root root 40 Feb 22 16:07 num.txt

-rw-r--r--. 1 root root 71 Feb 22 15:58 person.txt

-rw-r--r--. 1 root root  0 Feb 22 21:18 stu_102999_1.jpg

-rw-r--r--. 1 root root  0 Feb 22 21:18 stu_102999_2.jpg

-rw-r--r--. 1 root root  0 Feb 22 21:18 stu_102999_3.jpg

-rw-r--r--. 1 root root  0 Feb 22 21:18 stu_102999_4.jpg

-rw-r--r--. 1 root root  0 Feb 22 21:18 stu_102999_5.jpg

原文地址:https://www.cnblogs.com/HByang/p/9131745.html

时间: 2024-10-11 21:46:11

sed命令的使用的相关文章

学习笔记之sed命令使用

一.概述 1.  sed 全称为Stream Editor,就是行编辑器,意味着一次只处理一行文本,sed将被匹配到            的行放到自己特定的空间(通常称为模式空间)中进行编辑:然后再根据结果进行输出显示: 2.  在sed中还有一段空间称为保持空间,sed模式空间中的内容可以与保持空间的内容可以进            行自由互换,实际工作中用处很少,仅作参考: Sed工作流程如图 二.sed命令使用 sed [OPTION]... 'script' [input-file].

sed命令

文本处理三剑客: grep, egrep, fgrep:文本过滤器 sed:Stream EDitor,流编辑器,行     pattem space:模式空间.(基础)     hold space:保持空间 awk:文本格式化工具,报告生成器 语法 sed [OPTION]...  'script'  [input-file] ... script:     地址定界编辑命令         :%s/ 常用选项: -n:不输出模式空间中的内容至屏幕: -e script, --express

sed命令及vim的末行命令

sed:StreamEDitor,流编辑器,以行为单位对一个或多个文件进行编辑处理:每一次sed都会处理给定文件中的一行内容. 在sed处理文本时,将正在处理的当前行存储到临时的缓冲区中,称为"模式空间":用当前行去匹配给定的PATTERN,如果能匹配,则使用command编辑处理:如果不匹配,则默认输出至标准输出:然后继续处理下一行,直到文件的末尾. 默认情况下,sed的所有处理行为不会影响源文件的内容: 我们一般会使用sed命令来自动编辑一个或多个文件,简化对文件的循环操作: se

sed命令总结

在编写shell脚本的过程中,我们经常需要使用sed流编辑器和awk对文本文件进行处理. 什么是sed? sed是一种在线编辑器,它一次处理一行内容.sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结构.默认情况下,所有的输出行都被打印到屏幕上. sed的处理过程是什么? sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下:首先sed先把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上.sed每

linux sed命令详解

Linux环境:Ubuntu16.04 sed命令 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html http://blog.csdn.net/yiqingnian28/article/details/23133043 正则表达式 http://blog.csdn.net/wzzfeitian/article/details/8842371 sed -help 查看sed的用法 -n, --quiet, --sile

Linux的sed命令

一.初识sed 在部署openstack的过程中,会接触到大量的sed命令,比如 # Bind MySQL service to all network interfaces.sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf 那么这条命令是什么意思?接下来介绍sed命令答案自然就揭晓了.二.sed简介 sed:是一个编辑器,是一个强大的文件处理工具. sed作用:用来替换.删除,更新文件中的内容.sed能自动处理一个或多个文件. sed原理:sed

Linux三剑客之sed命令

选定行的范围:,(逗号) 删除操作:d命令 显示模式空间内容 追加(行下):a\命令 插入(行上):i\命令 退出:q命令 多点编辑:e命令 从文件读入:r命令 写入文件:w命令 替换操作:s命令 替换文本中的字符串: 全面替换标记g 保持和获取:h命令和G命令 保持和互换:h命令和x命令 sed 简介 sed 工作原理 命令格式 常用选项: 地址定界: 编辑命令: 替换标记: sed元字符集(正则表达式) 高级编辑命令: sed用法实例 作业: 作业: sed命令 sed 简介 Stream

sed命令应用详解

sed应用详解 sed是文本处理处理工具"三大剑客"之一,它 是一种流编辑器,sed一次只处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.sed不会修改原文件内容,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等. 用法:sed [OPTION]

sed命令(1)-基本语法和命令

注:学习sed命令的参考书籍为<Sed&Awk>,所以笔记也都是参考该书. sed命令的基本语法和命令: 一.sed命令语法 sed [options] {sed-commands} {input-file} sed是按每行依次读取input-file,然后执行sed-command,执行完的数据写入模式空间. options是用来传递sed命令的可选参数. 当需要使用多条命令的时候可以使用-e参数,其语法如下: sed [options] -e {sed-command1} -e {

第4章 sed命令

1 sed命令基本用法 sed(stream editor)是流编辑器,可对文本文件和标准输入进行编辑: sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件,如果需要保存改动内容,可以选择使用下面两种方法: 重定向.w编辑命令. 2 调用sed有三种方法 在Shell命令行输入命令调用sed,格式为: sed [选项] ‘sed命令’ 输入文件 将sed命令插入脚本文件后,然后通过sed命令调用它,格式为: sed [选项] -f sed脚本文件输入文件 将sed命令插入脚本文件后,