Stream EDitor ( Blog 6)

文本流编辑器,行编辑器sed详解

 

sed:GNU Stream EDitor,属于FSF组织,流编辑器;一次处理一行文本;
特性:类似于一个文本编辑工具;但可以过滤管道中的文本,是那些文本编辑器不具备的功能;

工作模式:
当有
一次读取一行至模式空间;
不匹配:不操作
匹配;编辑命令操作
显示模式空间中的所有行;

编辑操作:
操作整行:其它编辑命令;d,c,r,i,w,a …
操作行内:s查找替换

sed [OPTION]… ‘[[start_pos,]end_pos]编辑命令’ [input-file]…
模式空间:非删除/修改命令,显示全文;删除/修改命令仅显示非dc命令匹配到的行;

OPTION:
-n: 与p命令连用,不显示模式空间中的行;默认情况sed会打印所有处理过的输入行;除了c,d命令处理过的输入;
显示/etc/fstab中以UUID开头的行:
[root@localhost ~]# sed -n ‘/^UUID/p’ /etc/fstab

-e script, –expression=script;同时指定多个编辑命令;
删除/etc/fstab中以UUID开头的行:并删除以#开头的行;
[root@localhost ~]# sed -e ‘/^UUID/d’ -e ‘/^#/d’ /etc/fstab

-f /PATH/TO/SED_SCRIPT_FILE;每行一个script
删除以#开头的行
[root@localhost ~]# echo “/^#/d” > myscript
[root@localhost ~]# cat myscript
/^#/d
[root@localhost ~]# sed -f myscript /etc/fstab

-r, –regexp-extended;扩展的正则表达式
输出一个绝对路径,取其基名:
[root@localhost ~]# echo “/etc/sysconfig/network-scripts/ifcfg-eno16777736” | sed -r “s,(.*)/([^/]+)$,\2,”
-i[SUFFIX], –in-place[=SUFFIX];编辑原文件;不输出至标准输出;

地址定界编辑命令
地址定界:
(1) 空地址;对全文进行处理;全文的范围:1,$
[root@localhost ~]# sed ‘1,$c\ 123’ /etc/fstab
123
[root@localhost ~]# sed ‘c\ 123’ /etc/fstab
123
123
123
123
123
123
123
123
123
123
123
123
(2) 单地址;
# 指定行
替换指定行:
[root@localhost ~]# sed ‘1c\ 123’ /etc/fstab
/pattern/ 被此模式所匹配到的每一行;
替换模式匹配的每一行;
[root@localhost ~]# sed ‘/^UUID/c\ 123’ /etc/fstab
(3) 地址范围:
#,#
删除范围界定的行:
[root@localhost ~]# sed ‘1,$c\ 123’ /etc/fstab
123
#,+# 相对地址表示法
[root@www ~]# sed ‘1,+3c \123’ a.txt
123
5
6
7
8
[root@www ~]# sed ‘1,3c \123’ a.txt
123
4
5
6
7
8
删除行范围界定的行:
[root@localhost ~]# sed ‘1,+5c\ 123’ /etc/fstab <—- 范围内的行会被删除;
123
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=5b4e0db2-8c87-4422-9ac5-37142e5cc600 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0

#,/pat1/
[root@www ~]# sed ‘1,/^7/c \123’ a.txt
123
8
/pat1/,/pat2/
[root@www ~]# sed ‘/^1/,/^7/c \123’ a.txt
123
8
(4) 步进: ~
1~2: 所有奇数行;
替换每一行:
[root@www ~]# sed ‘1~2c \123’ a.txt
123
2
123
4
123
6
123
8

2~2: 所有偶数行;
替换每一行:
[root@www ~]# sed ‘2~2c \123’ a.txt
1
123
3
123
5
123
7
123

编辑命令:
d:删除模式空间中处理的行;
c: 除默认匹配全文之外,表示范围的连续的行
[root@localhost ~]# sed ‘c\ 123’ /etc/fstab
[root@localhost ~]# sed ‘1,$c\ 123’ /etc/fstab

w FILE : 将匹配的所有行写入文件中;
[root@localhost ~]# sed ‘1,$w fstab’ /etc/fstab

r FILE : 在匹配的每一行后追加指定文件中的内容;
[root@localhost ~]# sed ‘1,$r fstab’ /etc/fstab

a \text:匹配的每一行后追加 text;
[root@localhost ~]# sed ‘1,$a \fstab’ /etc/fstab

i \text:匹配的每一行前追加 text;
[root@localhost ~]# sed ‘1,$i \fstab’ /etc/fstab

p:打印特定的行;与-n连用
显示全文:[root@localhost ~]# sed ‘1,$a \fstab’ /etc/fstab
显示匹配UUID开头的行:[root@localhost ~]# sed -n ‘/^UUID/p’ /etc/fstab

=:为模式匹配到的行打印行号;
为每一行编号:
为UUID开头的行编号:
!: 条件取反;在模式后编辑命令之前
删除非UUID开头的行:
s///: 查找替换;@@@ ### (编辑行内的信息)
替换标记:
g: 全局替换
w /PATH/TO/SOMEFILE:将替换成功的结果所在行保存至指定文件中;
p: 显示替换成功的行;

高级编辑命令:
h: 把模式空间中的内容复制一份后,覆盖至保持空间中;
H:把模式空间中的内容复制一份后,追加至保持空间中;

g: 把保持空间中的内容复制一份后,覆盖至模式空间中;
G: 把保持空间中的内容复制一份后,追加至模式空间中;

x: 把模式空间中的内容与保持空间中的内容互换;exchange
n: 覆盖读取的行的下一行至模式空间;
N:追加读取的行的下一行至模式空间;
d: 删除模式空间中的行;
D: 删除多行模式空间中的第一行;N

练习1:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符;
~]# sed ‘s,^[[:space:]]\+,,’ /boot/grub/grub.conf
练习2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
~]# sed ‘s,^#[[:space:]]\+,,’ /etc/fstab
练习3:输出一个绝对路径给sed命令,取出其目录名,其行为类似于dirname
~]# echo “/etc/sysconfig/network-scripts/ifcfg-ens33” | sed ‘s,/$,,’ | sed -r ‘s,(.*)/([^/]+),\1,’

~]# echo “/etc/sysconfig/network-scripts/ifcfg-ens33” | sed ‘s,/$,,’ | sed -r ‘s@[^/]+$@@’
示例:
# sed -n ‘n;p’ FILE 显示偶数行;sed -n ‘2~2p’ FILE
1:匹配1n,追加后,匹配2p
# sed ‘1!G;h;$!d’ FILE 相当于 tac FILE
# sed ‘$!d’ FILE 相当于 tail -n 1 FILE
# sed ‘$!N;$!D’ FILE 相当于 tail -n 2 FILE
倒数第2行, N, 最后一行不D
# sed ‘/^$/d;G’ FILE ===> sed ‘/^$/d’ -e sed ‘G’ FILE
# sed ‘G’ FILE 原有的每行后方有空白行;
# sed ‘n;d’ FILE 显示奇数行;===> sed -e ‘n’ -e ‘d’ FILE

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89047

(0)
逆神阳逆神阳
上一篇 2017-11-27
下一篇 2017-11-27

相关推荐

  • 如何安装CentOS 6.9

    1、打开VMware,点击“创建新的虚拟机”   2、刚开始用的话,一般就选择推荐的典型类型来安装,所以直接点击“下一步”   3、此处选择稍后安装操作系统,这里我们先进行配置,点击“下一步”   4、因为我需要用里面的linux系统,所以选择客户机操作系统为Linux,选择版本为CentOS 64位,单击“下一步”。 &nbs…

    2017-07-11
  • Linux的启动流程

    启动流程  POST: Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、 串并行接口、键盘、 CD-ROM光驱等硬件情况的检测。 ROM: BIOS, Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、 …

    Linux干货 2016-09-13
  • centos启动流程

    加电自检 检测硬件是否存在并且能够正常运行,如cpu、内存、硬盘是否存在并能正常运行,以及外围得输入输出设备是否存在,如键盘、鼠标、显示器。 bios启动次序,按照次序查找个引导设备,启动第一个具有引导程序的设备,即为本次启动需要加载的设备。 加载boot loader bootloader安装在mbr中,linux的bootloader程序为grub和li…

    Linux干货 2017-11-14
  • LINUX课堂笔记(第一周)

    2018.03.05 LINUX: 切换虚拟终端:CTRL+ALT+F[1-6] 查看当前得终端设备命令:tty 查看内存: cat /proc/meminfo free -h 查看分区: cat /proc/partitions lsblk 查看CPU: lscpu cat /proc/cpuinfo 查看版本 cat /etc/centos-releas…

    Linux干货 2018-03-15
  • iptables-防火,防盗,防老王

        防火墙,其实说白了将,就是用于实现linux下访问控制的功能的,它分为两种方式,硬件防火墙和软件防火墙。不过无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义防火墙如何工作的,这就是防火墙的策略,规则,以达到让它对出入网络的IP,数据进行检测。     目前市…

    Linux干货 2017-05-02
  • 进程管理

    linux进程管理     内核的功能:进程管理、文件系统、网络管理、驱动程序、安全功能等     Pcrocess:运行中的程序的一个副本,是被载入内存中的一个指令集和         PID:进程…

    Linux干货 2016-09-12