成都网站建设设计

将想法与焦点和您一起共享

sed命令细说-创新互联

sed:

成都创新互联公司专业提供服务器托管德阳服务,为用户提供五星数据中心、电信、双线接入解决方案,用户可自行在线购买服务器托管德阳服务,并享受7*24小时金牌售后服务。

   工作方式:此命令也是针对文档行的一个命令。他的工作方式同grep一样,工作目标是文档中的行,一样是把文档复制到他的内存中进行操作,只要用户不保存,就不会改变原文件。

    磁盘源文件=A地-->复制到内存中的源文件或部分原文件=B地--->操作、筛选或者编辑后的保存在内存中的文件=C地

   常用选项:

    -n:表示不再输出不符合从B地道C地的内容

    -e:可以同时使用多个编辑指令对B地的内容进行编辑、筛选、造作

    -f: 后边可以跟一个脚本文件,此脚本文件每行都是一个编辑命令

    -r:  支持使用扩展正则表达式

    -i : 表示直接对原文件进行编辑,此选项比较危险哦

    地址定界:及表示我们要对那些行进行编辑

     1): 不给地址,即空地址。 则表示对全文进行处理

     2):单地址

        #:制定行

     3): 一个范围

       #,#:

       #。+#:

       /pat1/,/part2/

     4) 步进:-

        1-2:表示所有的奇数行

        2-2:表示所有的偶数行

     sed 常用编辑选项

       d : 删除  即删除“B地”的内容

         sed  '1,5d' /etc/fstab  表示删除1行和5行的内容

         sed  '/^UUID/d' /etc/fstab  表示删除以UUID开头的每一行

         sed  '3d' /etc/fstab    表示删除第三行

         sed '1-2d' /etc/fstab  表示显示偶数行(因为奇数行被删除了)

       p:表示显示“B地”的内容

         sed  '1~2p'  /etc/fstab   表示奇数行显示两遍

         sed  -n '1~2p' /etc/fstab  表示只显示奇数行  -n的意思是只保留编辑的行为

       a\text:指定的模式匹配到的行的后边追加“text",支持使用\n这个符号,实现多行追加

       i\text:在指定的模式匹配到的行前边插入"text",支持使用\n这个符号,实现多行追加

        例如: sed '5i \do it yourself' /etc/fstab  (我把fstab第一行的空格删除了所以是下边的效果)

#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
do it yourself
# 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

 sed '5a \do it yourself' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
do it yourself
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

 如果想在多行下边或者上边插入信息,可以用下操作

sed '/UUID/a \#I will do my best.' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# 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=42725ac6-787d-4be4-a766-a4b9325eba7e /                       ext4    defaults        1 1
#I will do my best.
UUID=ec7cf699-9e55-4305-a463-859f8ba83f3b /boot                   ext4    defaults        1 2
#I will do my best.
UUID=52937bf3-72c9-48d7-a05c-72726731c995 swap                    swap    defaults        0 0
#I will do my best.

 可以看出/UUID/=5

        c \text:把匹配到的行替换为此处指定的文本"text' 注意:是正行替换,不是只替换某个字符。

 例如:

sed '/UUID/c \#I will do my best.' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# 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
#
#I will do my best.
#I will do my best.
#I will do my best.

      w /PATH/TO/FILE: 把挑选出来的行保存到一个路径下,例如“把不是#号开头的行保存到/tmp/temp里去

 sed -n '/^[^#]/w  /tmp/temp/new.xx'  /etc/fstab

[root@marco-linux temp]# cd /tmp/temp
[root@marco-linux temp]# ls
etc  files6  new.xx  passwd1  passwd2  passwd3
[root@marco-linux temp]# cat new.xx
UUID=42725ac6-787d-4be4-a766-a4b9325eba7e /                       ext4    defaults        1 1
UUID=ec7cf699-9e55-4305-a463-859f8ba83f3b /boot                   ext4    defaults        1 2
UUID=52937bf3-72c9-48d7-a05c-72726731c995 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

      r /PATH/FROM/SOMEFILE: 合并文件用的~! 此选项的意思是把另外一个文件读取后存放在sed目标文件制定的行处 例如我们把/etc/isssue文件读取出来放在fstab文件的第三行下边

sed '3r /etc/issue' /etc/fstab

#
# /etc/fstab
CentOS release 6.7 (Final)
Kernel \r on an \m
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# 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=42725ac6-787d-4be4-a766-a4b9325eba7e /                       ext4    defaults        1 1
UUID=ec7cf699-9e55-4305-a463-859f8ba83f3b /boot                   ext4    defaults        1 2
UUID=52937bf3-72c9-48d7-a05c-72726731c995 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

       = :为每一个能匹配到的行加一个行号 使用方法:sed '/^UUID/= ' /etc/fstab

9
UUID=42725ac6-787d-4be4-a766-a4b9325eba7e /                       ext4    defaults        1 1
10
UUID=ec7cf699-9e55-4305-a463-859f8ba83f3b /boot                   ext4    defaults        1 2
11
UUID=52937bf3-72c9-48d7-a05c-72726731c995 swap                    swap    defaults        0 0

    !  : 表示取反  例如”fstab文件中删除所有以不是#开头的行。

        sed  '/^#/!d' /etc/fstab

#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# 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
#

     s///:查找替换,其分隔符可以自行指定,比如s$$$ s@@@@ 等

       替换标记:

         g:全局替换

         w: /PATH/TO/IILE : 将替换成功的结果保存到指定的文件中

         p:显示替换成功的行

      例如: sed 's@^[[:space:]]@@' /PATH/TO/FILE  后两个@@之间表示为空

  sed 就说这些把。。祝你学习愉快,也祝我学习愉快

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前标题:sed命令细说-创新互联
分享地址:http://chengdu.cdxwcx.cn/article/gejeo.html