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的文件系统:             根文件系统为rootfs(root file system)           &nbsp…

    Linux干货 2015-12-19
  • 持续交付的Mesos与Docker导入篇

    变革这个词在当今的数字化时代司空见惯,IT技术每过一段时间就会有一起革新,从WEB2.0、虚拟化、云计算、大数据、微架构、DevOps再到今天的容器Docker与Mesos。 Docker的出现方便了应用的测试、部署、与升级,其将各种应用程序和它们所依赖的运行环境打包成标准的Container/Image,进而发布到不同的平台上运行。Docker的轻量级、快…

    Linux干货 2016-07-10
  • 第一周作业

    一、计算机的基本组成和功能   cpu包括运算器、控制器、寄存器、缓存       运算器:计算功能,对数据进行加工处理的的部件;       控制器:负责从存储器取出指令,控制cpu计算器之间的运行结果和状态;       寄存器:暂存指令和数据的地方,存储…

    Linux干货 2016-12-04
  • 基于LNMP网站平台,测试增加memcached缓存系统后网站访问效果

    LNMP安装教程链接:22-love cat 17周博客作业第2部分-构建一个LVS-DR模型的高性能集群 memcached 安装及测试效果 一、概念     memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态…

    Linux干货 2016-08-22
  • 构建一个高可用的Nginx集群

    实验目的: 构建一个高可用的Nginx集群。 实验要求: 1、基于nat结构实现; 2、实现高可用; 实验拓扑图形: 实验步骤: 1、  按图配置各个网卡地址; 2、  设置Nginx主机(下面带#的部分为从所需要的配置,其他则一样) Yum install httpd nginx Vim /etc/httpd/conf/httpd.co…

    2017-05-15
  • M20用户和组练习题和作业

    1、创建用户gentoo ,附加组为bin 和root ,默认shell为/bin/csh ,注释信息为"Gentoo Distribution"  useradd gentoo -G bin,boot -s /bin/csh -c "Gentoo Distribution" 2 、创建下面的用户、组和组成员…

    Linux干货 2016-08-03

评论列表(1条)

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

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