Linux的文本处理工具之sed的使用

Sed文本处理工具

一、认识sed工具:

sed是一种流编辑器,一次处理一行内容。当进行处理时,把当前处理的行存储在临时的缓冲区中(俗称“模式空间”)后,再用sed命令去处理缓冲区的内容,最后把处理过的缓冲区内容送往屏幕打印显示。接着处理下一行,不断重复进行读取、处理、输出,直到文件末尾。 

注:sed命令处理文本,文件内容本身并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等 

二、使用man帮助了解sed的使用格式和常用的选项(#man sed):

NAMEsed的介绍)

sed – stream editor for filtering and transforming text 

SYNOPSISsed的格式使用)

sed [OPTION]… {script-only-if-no-other-script} [input-file]…

注:“script”为‘地址命令’ 

DESCRIPTIONsed的常用选项,如下挑选的选项使用上比较多,其他选项请查阅man帮助)

-n, –quiet, –silent  静默模式,不将模式空间内容输送到屏幕上打印。

suppress automatic printing of pattern space 

-e script, –expression=script   多点编辑。

add the script to the commands to be executed 

-f script-file, –file=script-file 从指定的文件中读取已经编辑好的脚本。

add the contents of script-file to the commands to be executed

–follow-symlinks

follow symlinks when processing in place 

-i[SUFFIX], –in-place[=SUFFIX]   在原文本处编辑(此处选项不建议使用,如果实在是要在原处编辑,请做好数据备份后再操作,以免数据的丢失。)

edit files in place (makes backup if SUFFIX supplied) 

-r, –regexp-extended  支持扩展正则表达式的使用。

use extended regular expressions in the script.

三、了解sed的简单编辑命令以及高级编辑命令:

1、  简单编辑命令:

d: 删除模式空间匹配的行

p: 显示模式空间中的内容

a \text:在行后面追加文本;支持使用\n实现多行追加

i \text:在行前面插入文本;支持使用\n实现多行插入

c \text:替换行为单行或多行文本

w /path/to/somefile :保存模式匹配的行至指定文件

r /path/from/somefile:读取指定文件的文本至模式空间中匹配到的行后

= :为模式空间中的行打印行号

! :模式空间中匹配行取反处理

2、  高级编辑命令:

高级编辑命令:

h: 把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g: 从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x: 把模式空间中的内容与保持空间中的内容进行互换

n: 读取匹配到的行的下一行覆盖至模式空间

N:追加匹配到的行的下一行至模式空间

d: 删除模式空间中的行

D:删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed

四、上面了解到sed是文本行处理的流编辑器,那么sed是如何定位要修改的内容呢?那么下面一起来学习sed的地址定界和查找替换:

1、地址定界:

(1) 不给地址:对全文进行处理。

(2) 单地址:

#: 指定的行

/pattern/:被此处模式所能够匹配到的每一行(模式空间)。

(3) 地址范围:

#,#    指定从第几行开始到第几行结束进行处理。

#,+#   指定从第几行开始,往后需要处理多少行。

/pat1/,/pat2/   模式空间定界。指定从第一个被模式空间匹配到开始,直至到被第二个模式空间匹配到结束来进行处理。

#,/pat1/   指定行与模式空间的配合使用;指定从第几行开始,到被模式空间匹配到的行进行处理。

(4) ~:步进

1~2 奇数行  只处理文本内容中的奇数行

2~2 偶数行  只处理文本内容中的偶数行

如下图:分别将文本内容中的奇数行或者偶数行删除掉

blob.png

2、查找与替换:

s///:查找替换,支持使用其它分隔符,如:s@@@s### 

替换标记:

g: 是行内全局替换

p: 将显示替换成功的行

w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中 

学习了上面的理论讲述,下面进行相应的事例演示:

1、简单编辑命令的使用:

sed ‘2p’ /etc/passwd  打印文本内容中的第二行并把文本的原内容一起输送到屏幕显示,可结合静默模式的选项-n配合使用(如下一事例题)

blob.png

sed -n ‘2p’ /etc/passwd

blob.png

sed -n ‘1,4p’ /etc/passwd 在屏幕上打印显示文本内容中的第一行到第四行的内容。

blob.png

sed -n ‘/root/p’ /etc/passwd 只打印显示被模式空间匹配到的行

blob.png

sed -n ‘2,/root/p’ /etc/passwd 2行开始,到被模式空间匹配到之间的所有行

blob.png

sed -n ‘/^$/=’ /testdir/issue 显示空行行号(如下图,原文本中第三行为空行)

blob.png

sed -n -e ‘/^$/p’ –e ‘/^$/=’ /testdir/issue 打印空行的行号和空行;多点编辑

blob.png

sed ‘/root/a\superman’ /etc/passwd  在被模式空间匹配到的行后新增一行打印Superman

blob.png

sed ‘/root/i\superman’ /etc/passwd  在被模式空间匹配到的行前新增一行打印Superman

blob.png

sed ‘/root/c\superman’ /etc/passwd  将被模式空间匹配到的行全部替换成了Superman

blob.png

sed ‘/^$/d’ /testdir/issue   将文本中的空行全部删除掉

blob.png

sed ‘1,10d’ /testdir/passwd 将文本中的前十行删除掉,只打印显示剩余的行

blob.png

nl /etc/passwd| sed‘2,5d’ 给文本加以显示行号,并删除第二行到第五行的内容

blob.png

nl/ etc/passwd| sed‘2a tea’  给文本加以显示行号,并给第二行后新增一行插入单词tea

blob.png

sed 's/nologin/csh/g' /testdir/passwd  在文本中全局查找nologin,并将其替换成csh

blob.png

sed -n‘s/root/&superman/p’ /etc/passwd在被模式空间匹配到的单词后面增加Superman

blob.png

sed -n‘s/root/superman&/p’ /etc/passwd 在被模式空间匹配到的单词前面增加Superman

blob.png

2、高级编辑命令的使用:

sed -n 'n;p' /testdir/ff  打印偶数行

blob.png

sed '1!G;h;$!d' /testdir/ff  逆序显示

blob.png

sed '$!N;$!D' /testdir/ff 打印最后两行

blob.png

sed '$!d' /testdir/ff 打印最后一行

blob.png

sed ‘G’ /testdir/ff  打印所有的行,并在每一行的后面增加一个空行

blob.png

# sed 'g' /testdir/ff 打印空白行

blob.png

sed -n '1!G;h;$p' /testdir/ff  同样是逆序打印

blob.png

# sed '/^$/d;G' /testdir/ff 

blob.png

原创文章,作者:Aaron_wang,如若转载,请注明出处:http://www.178linux.com/32037

(0)
Aaron_wangAaron_wang
上一篇 2016-08-10 10:22
下一篇 2016-08-10 10:22

相关推荐

  • httpd及https

    1、建立httpd服务,要求: (1) 提供两个基于名称的虚拟主机:     www1.stuX.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1/error_log,访问日志为/var/log/httpd/www1/access_log;   &nbs…

    2017-06-05
  • 始于此

         “路漫漫其修远兮,吾将上下而求索”,一段路程的结束,意味着一段路程的开始,同岁月般,永远也不能回到出发的那一刻,你所能做的,就是一路走下去。回顾珍惜,却不能逗留。         我的学习宣言是“功崇惟志,业广惟勤”,时刻告诉自己,“功”出…

    Linux干货 2016-11-28
  • 走进linux的世界

    1、描述计算机的组成及其功能。  所谓的计算机就是一种计算器,而计算器其实是:接受用户输入指令与数据,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的信息。 计算机系统由硬件系统和软件系统两个部分组成。 硬件系统由运算器、控制器、存储器、输入设备、输出设备组成。 运算器 是计算机中进行算术运算和逻辑运算的主要部件是计算机的主体。 控…

    Linux干货 2017-01-14
  • 密码保护:ansible书籍部分目录

    无法提供摘要。这是一篇受保护的文章。

    Linux干货 2015-12-14
  • FHS文件结构

    我们在前面学习的过程中有了解到,linux的发现版有很多种类型,那么如果每个版本都有着自己的想法去配置文件应该放置的目录,那么将造成管理上的困扰,于是为了解决这个问题,就有了FHS标准。 1.1 FHS 结构 1.1.1 软件的概念 之前,我们提到过,一个完整的计算机系统应该有两部分组成,即:计算机系统=软件+硬件。没有软件的硬件,计算机只不过是一堆只会发热…

    Linux干货 2016-10-27
  • Linux软件包管理工具yum详解

    yum介绍 yum客户端的使用 配置文件项作说明: 案例repo配置文件。 创建yum源命令(yum-config-manager) yum list相关命令 yum安装 yum更新和升级 yum查找和显示 yum删除程序 查看仓库 实战演练本地yum仓库(光盘) YUM内置变量 创建YUM仓库(http) yum介绍 yum命令是在Fedora和RedHa…

    Linux干货 2016-09-07

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-10 10:43

    架构清晰,思路清晰,有理论有时间。排版需要改进,对小标题或二级标题可以适当的进行一些字体上的调整。