Sed

sed工作原理及功能
  sed:Stream EDitor(流编辑器)
  工作原理:
    sed是一种流编辑器(行编辑器),一次处理一行内容。在处理时逐行将要处理的行存储在临时缓冲区当中,该缓冲区称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后将缓冲区的内容输出到标准输出(屏幕)。接着处理下一行,重复完成相同的操作直到文件末尾。sed处理的整个过程当中,原始文件中的内容并没有改变,除非使用重定向来存储处理后的结果。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

  同vim和grep的区别:
  vim是一种交互式的文本编辑工具
  sed是一种非交互式的文本编辑器(通过给定条件自动的逐行去处理文件)
  grep虽然也是一种流式的文本处理工具,但grep是用来检索条件关键字的,而sed却是搜索匹配处理文本工具

功能:
  sed 所具有的功能:数据的替换,删除,新增等,这里的数据可以是一些关键字,也可以是一些特定的行

语法结构及常用选项
 sed语法结构
 sed [OPTION]... 'script' [Input-File]...
   script 地址定界和编辑命令
常用选项:
  -n 不输出模式空间内容至屏幕(静默模式)
  -e script 多点编辑,指定多脚本编辑
    sed -e '1d' -e '2d' -e '5d' books.txt
  -f /PATH/TO/SCRIPT_FILE  从指定文件中读取编辑脚本并运行(每行一个编辑命令)
  -r 支持使用扩展正则表达式
  -i 原处编辑(直接修改原始文件)
注意:
  模式空间中的内容,默认都会在屏幕上显示出来
  sed在处理时,把当前要处理的行存储在"模式空间"中,然后处理模式空间中的内容,如果没有被模式空间中指定的模式匹配到,就将内容(没发生改变)输出到标准输出(屏幕);如果被模式空间中指定的的模式匹配到,就执行对匹配到模式内容对应的编辑命令操作,然后将操作后的结果输出到标准输出;

 地址界定(抽取的域)
  默认情况下,在sed编辑器中使用的命令会作用于文本数据的所有行。如果只想将命令作用于特定行或某些行,就可以用使用地址定界
  不给地址:对全文进行处理;
  单地址:
    #  表示数字,指定的行
    $  最后一行
    /pattern/ 被此处模式所能够匹配到的每一行(正在表达式)
  地址范围:
    #,#  从#行到#行
    #,+n 从#行开始,一直到向下的n行
    /pat1/,/pat2/  从第一次被pat1匹配到的行开始,到第一次被pat2匹配到的行结束,中间的所有行
    #,/pat1/  从#行开始,到第一次被pat1匹配到的行结束,中间的所有行
  ~:步进,指定起始行及步长。
    1~2  所有奇数行(从第1行开始,步进为2)
    2~2  所有偶数行(从第2行开始,步进为2)

  编辑命令
  sed的编辑命令
  d 删除模式空间匹配的行;
  p 显示模式空间中被地址定界匹配到的行的内容
  a\text 会在指定行后增加一个新行;支持使用\n实现多行追加
  i\text 会在指定行前增加一个新行;支持使用\n实现多行插入
  c\text 把指定到的行替换为此处指定的文本“text”
  w /path/to/somefile  保存模式空间中匹配到的行至指定文件当中
  r /path/from/somefile 读取指定文件的内容至当前文件被模式匹配到的行的下方;实现文件合并
  y/inchars/outchars/  转换命令
    转换命令会对 inchars 和 outchars 值进行一对一的映射。 inchars 中的第一个字符会被转换为 outchars 中的第一个字符,第二个字符会被转换成 outchars 中的第二个字符。这个映射过程会一直持续到处理完指定字符。如果 inchars 和 outchars 的长度不同,则sed编辑器会产生一条错误消息。你无法限定只转换在特定地方出现的字符

  =  输出模式空间中匹配到的行的行号
  !  条件取反,非模式空间中匹配到的行
  s/// 查找替换,分隔符可自行指定例如:s@@@或s###等
    替换标记:
    Num 第Num次查找到的字符串被替换(Num为数字例如2,就是第2处匹配到的字符串被替换)
    g 全局替换(所有查找到的字符串全部替换)
    w /PATH/TO/SOMEFILE 将替换成功后的结果保存至指定文件中
    p 只显示被模式匹配到并替换成功后的行
    & 代表前面模式查找到的字符串(前向引用)
注意:这里添加或替换的内容,只是在模式空间中改变,原文件并没有被修改,如果要修改源文件需加 -i 选项(慎用)

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

删除以UUID开头的行,被模式 /^UUID/匹配到的每一行

删除奇数行

-n不显示模式空间中的内容

p打印模式空间中的内容
逐行读取文件内容到模式空间中,默认无论是否被模式匹配都会被显示出来, p命令是把模式空间中匹配到的行显示出来,所以第三行还会再显示2遍

-n选项指明不显示模式空间中的内容,p命令显示模式匹配到的行(只显示第3行)

演示:
1、d删除模式空间匹配的行
[root@centos7 ~]# cat -n /etc/fstab
1
2 #
3 # /etc/fstab
4 # Created by anaconda on Sun Nov 6 10:30:14 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
10 UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
11 UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
12 UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0
[root@centos7 ~]# cat -n /etc/fstab > sed.txt

# 删除1到5行的内容
[root@centos7 ~]# sed '1,5d' sed.txt
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
10 UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
11 UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
12 UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

# 删除以UUID开头的行,被模式 /^UUID/ 匹配到的每一行
[root@centos7 ~]# sed '/^UUID/d' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Nov 6 10:30:14 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#

# 删除奇数行
[root@centos7 ~]# sed '1~2d' sed.txt
2 #
4 # Created by anaconda on Sun Nov 6 10:30:14 2016
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
8 #
10 UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
12 UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

2、p打印模式空间中的内容
# -n 不显示模式空间中的内容,
[root@centos7 ~]# sed -n '3d' sed.txt

# 首先显示模式空间中没有被匹配到的行(偶数行),然后再显示被匹配到的指定的行,执行p命令打印出第3行,
# 因为默认模式空间中的内容都会被显示出来,所以第三行还会再显示一遍。对比d命令,是把模式空间中匹配到的行
# 删除,就显示不出来了
[root@centos7 ~]# sed '3p' sed.txt
1
2 #
3 # /etc/fstab
3 # /etc/fstab
4 # Created by anaconda on Sun Nov 6 10:30:14 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
10 UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
11 UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
12 UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

# 首先,-n选项指明不显示模式空间中的内容,然后命令p指明显示指定的行
[root@centos7 ~]# sed -n '3p' sed.txt
3 # /etc/fstab

3、i \text,a \text和c \text:在行后面追加文本;支持使用\n实现多行追加
#默认会显示模式空间中的所有内容(因为没有对第3行执行d命令,所以也会显示出来),然后再在行前插入一行
[root@centos7 ~]# sed '3i \new lines' sed.txt
1
2 #
new lines
3 # /etc/fstab
4 # Created by anaconda on Sun Nov 6 10:30:14 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
10 UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
11 UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
12 UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

# 在行后插入一行
[root@centos7 ~]# sed '3a \new lines' sed.txt
1
2 #
3 # /etc/fstab
new lines
4 # Created by anaconda on Sun Nov 6 10:30:14 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
10 UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
11 UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
12 UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

# \n 实现多行追加
[root@centos7 ~]# sed '3a \new lines\ntaotao\nxiuxiu' sed.txt
1
2 #
3 # /etc/fstab
new lines
taotao
xiuxiu
4 # Created by anaconda on Sun Nov 6 10:30:14 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
10 UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
11 UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
12 UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

#在匹配的模式后增加内容
[root@centos7 ~]# sed '/^UUID/a \# add new line base on UUID' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Nov 6 10:30:14 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
# add new line base on UUID
UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
# add new line base on UUID
UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
# add new line base on UUID
UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0
# add new line base on UUID


# 将指定的行替换为此处的“text”
[root@centos7 ~]# sed '/^UUID/c \# add new line base on UUID' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Nov 6 10:30:14 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
# add new line base on UUID
# add new line base on UUID
# add new line base on UUID
# add new line base on UUID

4、w /path/to/somefile:把指定的内容另存至/path/to/somefile路径所指定的文件中。
[root@centos7 ~]# sed -n '/^[^#]/p' /etc/fstab
UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

[root@centos7 ~]# sed '/^[^#]/w /tmp/fstab.new' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Nov 6 10:30:14 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

[root@centos7 ~]# cat /tmp/fstab.new
UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

5、r /path/from/somefile:在文件的指定位置插入另一个文件的所有内容,完成文件合并。
[root@centos7 ~]# sed '3r /etc/issue' sed.txt
1
2 #
3 # /etc/fstab
\S
Kernel \r on an \m

Mage Education Learning Services
http://www.magedu.com

4 # Created by anaconda on Sun Nov 6 10:30:14 2016
5 #
6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8 #
9 UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
10 UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
11 UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
12 UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

6、=为模式空间中的行打印行号
[root@centos7 ~]# sed '/^UUID/=' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Nov 6 10:30:14 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
9
UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
10
UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
11
UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
12
UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

7、!模式空间中匹配行取反处理
# 删除非#号开头的行,注意“!”的位置
[root@centos7 ~]# sed '/^#/!d' /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Nov 6 10:30:14 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#

8、s///查找替换,及多点编辑
[root@centos7 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Nov 6 10:30:14 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0


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

/etc/fstab
Created by anaconda on Sun Nov 6 10:30:14 2016

Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0


# 多点编辑,同时把UUID开头的行删除
[root@centos7 ~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab


/etc/fstab
Created by anaconda on Sun Nov 6 10:30:14 2016

Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

9、&和g的用法:

练习题:
1、删除/etc/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符
# 使用查找替换
[root@centos7 ~]# sed 's@^[[:space:]]\+@@' /etc/grub2.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"
fi

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
[root@centos7 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Nov 6 10:30:14 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0


# 注意这里的空白字符可以出现任意次(0次,1次或多次)
[root@centos7 ~]# sed 's@^#[[:space:]]*@@' /etc/fstab

/etc/fstab
Created by anaconda on Sun Nov 6 10:30:14 2016

Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

UUID=7bdf8e89-59c8-425e-a108-5c7c115e0afe / xfs defaults 0 0
UUID=3360e49a-d492-4f98-9957-edcb4db93384 /boot xfs defaults 0 0
UUID=eb3cdf15-b9e4-4ea6-b28b-75d4b4a54df8 /usr xfs defaults 0 0
UUID=18deb1ed-ee42-4269-94f3-6791304344e8 swap swap defaults 0 0

3、在/root/install.log每一行行首增加#号
[root@CentOS6 ~]# sed 's@^@#@' /root/install.log
#Installing words-3.0-17.el6.noarch
#Installing centos-indexhtml-6-2.el6.centos.noarch
#Installing ql2400-firmware-7.03.00-1.el6_5.noarch
#Installing iwl5000-firmware-8.83.5.1_1-1.el6_1.1.noarch
#Installing ql2100-firmware-1.19.38-3.1.el6.noarch
#Installing ivtv-firmware-20080701-20.2.noarch
#Installing libertas-usb8388-firmware-5.110.22.p23-3.1.el6.noarch
#Installing xorg-x11-drv-ati-firmware-7.6.1-2.el6.noarch
#Installing ql2500-firmware-7.03.00-1.el6_5.noarch
#Installing atmel-firmware-1.3-7.el6.noarch
#Installing zd1211-firmware-1.4-4.el6.noarch
#Installing iwl4965-firmware-228.61.2.24-2.1.el6.noarch
#Installing rt61pci-firmware-1.2-7.el6.noarch
#Installing iwl3945-firmware-15.32.2.9-4.el6.noarch
#Installing ql2200-firmware-2.02.08-3.1.el6.noarch
#Installing rt73usb-firmware-1.8-7.el6.noarch
#Installing ipw2100-firmware-1.3-11.el6.noarch
#Installing ql23xx-firmware-3.03.27-3.1.el6.noarch

4、在/etc/fstab文件中不以#开头的行的行首增加$号
[root@CentOS6 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Nov 6 11:54:11 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg0-root / ext4 defaults 1 1
UUID=493db72e-4b0d-4e2a-82fa-5e002f0bd667 /boot ext4 defaults 1 2
/dev/mapper/vg0-usr /usr ext4 defaults 1 2
/dev/mapper/vg0-var /var ext4 defaults 1 2
/dev/mapper/vg0-swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0

[root@CentOS6 ~]# sed 's@^[^#]@$&@' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Nov 6 11:54:11 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
$/dev/mapper/vg0-root / ext4 defaults 1 1
$UUID=493db72e-4b0d-4e2a-82fa-5e002f0bd667 /boot ext4 defaults 1 2
$/dev/mapper/vg0-usr /usr ext4 defaults 1 2
$/dev/mapper/vg0-var /var ext4 defaults 1 2
$/dev/mapper/vg0-swap swap swap defaults 0 0
$tmpfs /dev/shm tmpfs defaults 0 0
$devpts /dev/pts devpts gid=5,mode=620 0 0
$sysfs /sys sysfs defaults 0 0
$proc /proc proc defaults 0 0

5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

过程分析如下

6、利用sed 取出ifconfig命令中本机的IPv4地址

7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数

sed 中的保持空间
 保持空间:sed 除了"模式空间"(pattern space),还有一个"hold space"的内存空间,称之为保持空间。所谓保持空间,就是,对于模式空间处理过的行,后续还有其它处理,因此可以先把处理过的行移动至保持空间,后续要处理时再移动回模式空间中。 这就类似于加工车间和仓库的概念,好比模式空间为加工车间,保持空间为仓库,不过这里的仓库存放的都是些半成品的产品。
 高级编辑命令:
  h 把模式空间中的内容覆盖至保持空间中
  H 把模式空间中的内容追加至保持空间中
  g 把保持空间中的内容覆盖至模式空间
  G 把保持空间中的内容追加至模式空间
  x 把模式空间中的内容与保持空间中的内容进行互换
  n 读取匹配到的行的下一行覆盖至模式空间
  N 读取匹配到的行的下一行追加 至模式空间
  d 删除模式空间中的行(模式空间中只有单行时有效)
  D 删除多行模式空间中的第1行(前面的追加会使模式空间中出现多行)
  P 打印多行模式空间中的第1行

posted @ 2018-10-25 22:11  luck-luck  阅读(354)  评论(0编辑  收藏  举报