未加星标

Sed文本文件工具的使用详解

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二03 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏
Sed文本文件工具的使用详解 一、概述

sed 工具实际上就是一个非交互式的编辑器,主要是为了处理文本而生的,我们知道处理文本的三剑客是 grep sed awk 我们之前学习过 grep 文本过滤工具,它的主要作用是为了过滤文本,而sed 工具也是过滤文本,只不过sed工具针对的是文件中的每一行,而且sed工具更加强大,下面还具体说明一下sed 工具的原理。

二、sed 原理

sed 工具实际上的原理,我用一幅图给大家阐述一下:

我这里引用一篇博客中对sed工具的定义:

sed工具全称为流式编辑器,它可以被使用作为行过滤器(顾名思义sed是按照行查找进行操作的),它的工作原理可以描述为:把前一个程序的输出引入到sed的输入,经过一系列编辑命令转换为另外一种格式输出。(形象的解释如下图所示,模式空间会在后面单独提出)

sed是一个非交互式的流编辑器(stream editor)。所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出;而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令),接着读入下一行。整个文件像流水一样被逐行处理然后逐行输出。

sed一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区(pattern space)中的内容,处理完成后,把缓冲区(pattern space)的内容送往屏幕。接着清空缓冲区(pattern space),处理下一行,这样不断重复,直到文件末尾。

pattern space(模式空间)相当于车间sed把流内容在这里处理;

hold space(保留空间)相当于仓库,加工的半成品在这里临时储存(当然加工完的成品也在这里存储)。

How sed Works:

先读入一行,去掉尾部换行符,存入pattern space,执行编辑命令。

处理完毕,除非加了-n参数,把现在的pattern space打印出来,在后边打印曾去掉的换行符。

把pattern space内容给hold space,把pattern space置空。

接着读下一行,处理下一行。

一种非平凡情况,一个文件仅一行,尾部没换行,sed只打印,不会尾部加换行,但若在尾部又附加了输出,他会再补上那个换行。


Sed文本文件工具的使用详解
Sed文本文件工具的使用详解

下面我们边举例子 边来介绍sed 命令的选项和sed 命令的用法:

三、sed 命令的选项及其用法

要想真正了解并熟练使用sed 命令,必须知道sed 命令的执行过程,sed 命令是按照模式进行匹配后输出的,sed命令中有2个空间,一个叫做模式空间(pattern mode) 一个叫做保留空间(hold mode) 我们可以把模式空间想象成为一个流水线,把保留空间想象成为一个仓库,

比如下面的命令

sed '2,3p' /etc/fstab

执行的过程其实是这样,我画一幅图来展示一下执行的流程,我们先来看/etc/fstab 中的内容:

1
2 #
3 # /etc/fstab
4 # Created by anaconda on Tue Aug 23 16:38:07 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 /dev/mapper/centos-root / xfs defaults 0 0
10 UUID=79e2f3d9-4bd1-4b1c-beda-dcac56065789 /boot xfs defaults 0 0
11 /dev/mapper/centos-home /home xfs defaults 0 0
12 /dev/mapper/centos-swap swap swap defaults 0 0
13 /dev/sdc1 /mydata ext4 defaults 0 0

当我们执行sed 命令的时候,他是把文件中的内容一行一行读入到模式空间中,


Sed文本文件工具的使用详解

通过上面我这个草图可以看出,sed 执行的时候是一行一行的把文件中的内容读入到模式空间中,然后再分析sed命令进行匹配,最后输出到标准输出(显示器)上。

下面我介绍一下sed的常用选项并通过习题练习讲解sed的基本用法和高级用法,首先我们man 一下sed

sed - stream editor for filtering and transforming text
sed [OPTION]... {script-only-if-no-other-script} [input-file]..
3.1[option] 选项介绍:

1、 -n 选项 不输出模式空间中的内容至屏幕

例如:

[[email protected] test2]# cat -n /etc/fstab
1
2 #
3 # /etc/fstab
4 # Created by anaconda on Tue Aug 23 16:38:07 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 /dev/mapper/centos-root / xfs defaults 0 0
10 UUID=79e2f3d9-4bd1-4b1c-beda-dcac56065789 /boot xfs defaults 0 0
11 /dev/mapper/centos-home /home xfs defaults 0 0
12 /dev/mapper/centos-swap swap swap defaults 0 0
13 /dev/sdc1 /mydata ext4 defaults 0 0
[[email protected] test2]# cat -n /etc/fstab | sed -n '2,3p'
2 #
3 # /etc/fstab
[[email protected] test2]#

2、 -e 选项 意义为多点编辑 也就是-e 后面可以加很多的命令 例如:

如果有这样一个要求,把/etc/fstab 文件中的所有以#开头的行都替换成空白 并且把以UUID 开头的行都删除

我们的命令需要这样写:

[[email protected] test2]# sed -e 's@^#[[:space:]]*@@g' -e '/^UUID/d' /etc/fstab
/etc/fstab
Created by anaconda on Tue Aug 23 16:38:07 2016
Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos-root / xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdc1 /mydata ext4 defaults 0 0
[[email protected] test2]#

3、-f 选项 /PATH/TO/SED_SCRIPT_FILE 每行一个编辑命令 ,可以把-e 的多行编辑命令写到一个文件里,例如

把刚才上面的例子-e 后面的选项内容写到文件中,我们可以向下面这样执行

我们首先用vim 命令创建出一个文本文件,在文本文件中加入刚才-e 后面的命令

s@^#[[:space:]]*@@g
/^UUID/d

然后我们在用下面的-f 选项来执行这个文件就可以了:

[[email protected] test2]# sed -f test.sh /etc/fstab
/etc/fstab
Created by anaconda on Tue Aug 23 16:38:07 2016
Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos-root / xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdc1 /mydata ext4 defaults 0 0

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

主题: 显示器TI其实博客OPT删除半成品
分页:12
转载请注明
本文标题:Sed文本文件工具的使用详解
本站链接:http://www.codesec.net/view/480386.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(42)