sed大法好

sed

sed概念

(1)基本概念:sed是流编辑器(stream editor),A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline).作用就是对输入的流(文件或者从一个管道输入的流)的最基本的文本处理。

(2)工作原理:处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。

(3)主要用途:文本处理,自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

sed的基本语法

sed [OPTION]... 'script' [input-file] ...

script:地址定界编辑命令:

(1) 空地址:对全文进行处理;
(2) 单地址:
    #:指定行;
    /pattern/:被此模式所匹配到的每一行;
(3) 地址范围
    #,#:
    #,+#:
    #,/pat1/
    /pat1/,/pat2/
    $:最后一行;
(4) 步进:~
    1~2:所有奇数行
    2~2:所有偶数行

选项:

-n:不输出模式空间中的内容至屏幕;
-e script, --expression=script:多点编辑;
-f /PATH/TO/SED_SCRIPT_FILE
    每行一个编辑命令;
-r, --regexp-extended:支持使用扩展正则表达式;
-i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;

编辑命令:

d:删除;
p:显示模式空间中的内容;
a \text:在行后面追加文本“text”,支持使用\n 实现多行追加;
i \text:在行前面插入文本“text”,支持使用\n 实现多行插入;
c \text:把匹配到的行替换为此处指定的文本“text”;
w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;
r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合
并;
=:为模式匹配到的行打印行号;
!:条件取反;
地址定界!编辑命令;
s///:查找替换,其分隔符可自行指定,常用的有 s@@@, s###等;
替换标记:
g:全局替换;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;

练习:

1、删除/etc/passwd中的1-5行;

sed大法好

2、删除UUID开头的行

sed大法好

3、删除#开头的所有行

sed '/^#/d' /etc/passwd

4、禁止输出模式空间内容

sed大法好

5、删除1 3 5 7 9行

sed大法好

6、显示所有奇数行的模式空间内容

sed大法好

7、插入、追加,#i是#行之前,#a是#行之后

sed大法好

8、打印1-3行,用-n 加p

sed大法好

9、查看passwd文件的root到tss的行

sed大法好

10、替换行里面的第一个,第二个,全部

cat -n /etc/passwd |sed  's/root/ROOT/1'
cat -n /etc/passwd |sed  's/root/ROOT/2'
cat -n /etc/passwd |sed  's/root/ROOT/g'

sed大法好

11、另存为用w

 sed -n 's/root/ROOT/w /root/sh/tx' /etc/passwd

12、-i,直接编译原文件

sed大法好

13、读取指定文件的内容,到指定行后。

sed大法好

sed大法好

练习 1:删除/boot/grub/grub2.cfg 文件中所有以空白字符开头的行的行首的所有空白 字符; ~]# sed 's@^[[:space:]]+@@' /etc/grub2.cfg

练习 2:删除/etc/fstab 文件中所有以#开头的行的行首的#号及#后面的所有空白字符; ~]# sed 's@^#[[:space:]]*@@' /etc/fstab

练习 3:输出一个绝对路径给 sed 命令,取出其目录,其行为类似于 dirname; ~]# echo "/var/log/messages/" | sed 's@[^/]+/\?$@@' ~]# echo "/var/log/messages" | sed -r 's@[^/]+/?$@@'

高级编辑命令:

h:把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
g:把保持空间中的内容覆盖至模式空间中;
G:把保持空间中的内容追加至模式空间中;
x:把模式空间中的内容与保持空间中的内容互换;
n:覆盖读取匹配到的行的下一行至模式空间中;
N:追加读取匹配到的行的下一行至模式空间中;
d:删除模式空间中的行;
D:删除多行模式空间中的所有行;

示例:

sed -n 'n;p' FILE:显示偶数行;
sed '1!G;h;$!d' FILE:逆序显示文件的内容;
sed ’$!d' FILE:取出最后一行;
sed '$!N;$!D' FILE:取出文件后两行;
sed '/^$/d;G' FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白
行;
sed 'n;d' FILE:显示奇数行;
sed 'G' FILE:在原有的每行后方添加一个空白行;

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

(0)
N24_yeziN24_yezi
上一篇 2016-12-02 17:20
下一篇 2016-12-02 18:03

相关推荐

  • linux学习第一天

    了解Linux和计算机的基础

    2018-03-26
  • 谨记初心

    谨以此文记录我从小白成长的心路历程与技术的成长

    Linux干货 2018-03-26
  • puppet配置详解

    主程序: facter-2.4.6-1.el7.x86_64.rpm puppet-3.8.7-1.el7.noarch.rpm #agent主机上用的包 puppet-server-3.8.7-1.el7.noarch.rpm 注:yum仓库中不是最新版的,可能会有些差别,最好到ftp上下载最新版的 配置文件:    &nbs…

    Linux干货 2017-08-08
  • 网络管理1

    一、知识整理 1、路由转发:拆除第一层MAC地址,根据IP地址广播,收到信号后重新封装。一个路由器连接多个广播域,一个交换机连接多个冲突域。 2、网络用户应用程序:WEB浏览器;即时消息;电子邮件;协作(视频会议,vnc);web网络服务;文件网络服务;数据库服务;中间件服务(Tomcat);安全服务(netfilter)。 3、HDR:报头。Frame C…

    Linux干货 2016-09-05
  • N25 第二周作业

    一.Linux上常用的文件管理类命令及用法示例     1.cp复制命令,具体有两个,一为单源复制,一种为多源复制。      常用选项         -i :交互式复制,覆盖之前提醒用户确认。       …

    Linux干货 2016-12-12
  • Linux终端类型

    适用对象:本文适用于初学Linux以及有志于学习Linux的朋友们。   一、         什么是终端 计算机体系中,终端主要是指与计算机连接,并可以与用户(人类)进行交互的设备。 二、      &nbs…

    Linux干货 2016-10-14

评论列表(1条)

  • 马哥教育
    马哥教育 2016-12-07 23:45

    总结的很好,最后部分可以演示一下过程!!