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

相关推荐

  • vim编辑器及shell基础

    1、复制/etc/rc.d/rc.sysint文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#cp /etc/rc.d/rc.sysint /tmpvim /tmp/rc.sysint:%s@^[[:space:]]\+@#&@g 2、复制/boot/grub/grub.conf至/tmp目录中,删除/…

    Linux干货 2017-12-08
  • 用户组和权限管理2

    十七、linux文件系统上的特殊权限     suid:s表示,sgid:s表示,sticky:t表示          安全上下文     前提:进程有属主和属组,文件有属主和属组  &n…

    Linux干货 2016-08-04
  • Mariadb的主从复制实验和半同步的实现

    1,主服务器需要开启二进制日志记录,并且授权一个用户给从节点。 主服务器的主配置文件[mysqld]内容如下。 [mysqld] port= 3306 socket= /tmp/mysql.sock skip-external-locking key_buffer_size = 256M max_allowed_packet = 1M table_open_…

    2017-09-18
  • 26期全程班-第四周博客作业

      1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。  # cp -R /etc/skel /home/tuser1 # chmod -R go-rwx /home/tuser1/ 2、编辑/etc/group文件,添加组hadoop。 # echo &…

    Linux干货 2017-02-27
  • ☞实时数据同步方案{ rsync; inotify; }

    实时数据同步方案{ rsync; inotify; } rsync 传输数据 安装 rsyncd 服务 CentOS 6 CentOS 7 配置 rsyncd 服务 配置 rsync 手动同步示例     启动 rsyncd 服务 CentOS 6 CentOS 7 rsync 客户端命令 rsync 数据传输功能 基…

    Linux干货 2016-10-29
  • 网卡路由配置信息及偷懒用法

            对于初学Linux的人来说,配置网卡无疑是比较晕的,各种的配置文件,字段、命令等让人眼花撩乱。所以这一章主要给大多数还在网卡配置路由配置的同学们解惑一、网卡配置基本概念        …

    Linux干货 2017-05-08

评论列表(1条)

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

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