sed行编辑器

sed命令:

将指定的文本文件内容逐行读取至sed的临时内存空间当中,成为"模式空间",然后逐行查看是否被sed的地址定界所匹配到,如果匹配

则执行相应的编辑命令,否则,默认将模式空间中的内容输出至标准输出

sed [OPTION]... ‘script‘ [input-file]...

script:地址定界编辑命令

常用选项:

-n:静默模式,不输出模式空间中的内容至标准输出

-e:定义多个sed script

-f /PATH/TO/SED_SCRIPT_FILE

每行一个编辑命令

-r:启用扩展正则表达式

-i:直接编辑原文件

sed -i.bak ‘script‘ FILE:在编辑原文件之前先备份原文件为FILE.bak

地址定界:

(1)空地址:对全文进行处理

(2)单地址:

#:指定行

/pattern/:被此模式所匹配到的每一行

(3)地址范围:

#,#:起始到结束

#,+#:指定的行开始向后加#行

#,/pat1/

/pat1/,/pat2/

(4)步进:~

1~2:所有奇数行

2~2:所有偶数行

编辑命令:

d:删除模式空间中的内容

p:显示被模式所匹配到的内容

a \string:在指定的行后面添加新行,内容为string

\n:换行

i \string:在指定的行前面追加新行,内容为string

\n:换行

c \string:把匹配到的行替换为string

w /PATH/TO/SOMEFILE:将匹配到的行的内容保存至指定文件中

r /PATH/FROM/SOMEFILE:将指定文件中的内容追加至所匹配到的行后面

=:为模式匹配到的行打印行号

!:条件取反

地址定界!编辑命令

s/PATTERN/STRING/修饰符:查找并替换,其分隔符可自定义,例如[email protected]@@,s###等等

PATTERN:可使用正则表达式的模式进行查找匹配

STRING:使用字符串定义替换的内容,可使用后向引用\1,\2,…

&:引用前面PATTERN所匹配到的所有内容

修饰符:

p:显示替换成功的内容

w /PATH/TO/SOMFILE:将替换成功的内容保存至指定文件当中

i:查找替换时忽略大小写

g:全局替换,默认只替换每行第一个被PATTERN所匹配到的内容

练习:

1.删除/boot/grub2/grub.cfg文件中所有以空白字符开头的行的行首的所有空白字符

[[email protected] ~]# cat /boot/grub2/grub.cfg | sed -r ‘[email protected]^[[:space:]][email protected]@‘
#
# 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
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi

2.删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符

[[email protected] ~]# cat /etc/fstab | sed -r ‘[email protected]^#[[:space:]][email protected]@‘
This is one line.
This is two line.
This is three line.
#
/etc/fstab
Created by anaconda on Thu Jul 21 12:06:23 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=89ec9224-65c7-4461-9350-9d5e016d016c /                       xfs     defaults        0 0
UUID=1b0c5c77-c343-4139-9533-0ef66ffe5d39 /boot                   xfs     defaults        0 0
UUID=e70e4b66-c716-4d00-a483-4771fea4a9c1 /testdir                xfs     defaults        0 0
UUID=6cfc5ecc-625f-4a4c-936f-95e4bab93dd6 swap                    swap    defaults        0 0
[[email protected] ~]#

3.在/root/install.log每一行行首增加#号

[[email protected] ~]# sed -r ‘[email protected]^@#@‘ install.log
#Installing zip-3.0-1.el6_7.1.x86_64
#Installing rfkill-0.3-4.el6.x86_64
#Installing rdate-1.4-16.el6.x86_64
#Installing bridge-utils-1.2-10.el6.x86_64
#Installing b43-fwcutter-012-2.2.el6.x86_64
#Installing latrace-0.5.9-2.el6.x86_64
#Installing trace-cmd-2.2.4-3.el6.x86_64
#Installing crash-trace-command-1.0-5.el6.x86_64
#Installing m17n-db-thai-1.5.5-1.1.el6.noarch
#Installing scenery-backgrounds-6.0.0-1.el6.noarch
#Installing gnome-backgrounds-2.28.0-2.el6.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

4.在/etc/fstab文件中不以#开头的行的行首增加#号

[[email protected] ~]# sed -r ‘[email protected]^[^#]@#&@‘ /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Thu Jul 21 15:34:03 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=f4d977bb-af76-4617-b07f-9c70ae42a056 /                       ext4    defaults        1 1
#UUID=7907abdd-41cd-4609-8392-80e4a88c5b4c /boot                   ext4    defaults        1 2
#UUID=50054489-14c8-4e49-a912-2ff368371653 /testdir                ext4    defaults        1 2
#UUID=d9f41da6-9df2-410f-8074-500425b26a3d 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
[[email protected] ~]#

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

[[email protected] ~]# echo /etc/sysconfig/network-scripts/ | sed ‘[email protected]^\(.*\/\)\([^/]\+\/\?\)@\[email protected]‘    #取出目录名
/etc/sysconfig/
[[email protected] ~]# echo /etc/sysconfig/network-scripts/ | sed ‘[email protected]^\(.*\/\)\([^/]\+\/\?\)@\[email protected]‘    #取出基名
network-scripts/
[[email protected] ~]#

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

[[email protected] ~]# ifconfig | sed -n ‘/\<inet\>/p‘ | sed -r ‘[email protected] (([[:digit:]]+\.){3}[[:digit:]]+).*@\[email protected]‘
        10.1.253.23
        127.0.0.1
        192.168.122.1
[[email protected] ~]#

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

[[email protected] Packages]# df -lh    #查看光盘是否挂载
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        50G  4.1G   46G   9% /
devtmpfs        475M     0  475M   0% /dev
tmpfs           489M   84K  489M   1% /dev/shm
tmpfs           489M  7.1M  482M   2% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda5        20G   61M   20G   1% /testdir
/dev/sda1       197M  139M   59M  71% /boot
tmpfs            98M   20K   98M   1% /run/user/42
tmpfs            98M     0   98M   0% /run/user/0
/dev/sr0        7.3G  7.3G     0 100% /media/cdrom
[[email protected] Packages]# ls | sed -r ‘[email protected]*\.([^.]+)\[email protected]\[email protected]‘ | sort | uniq -c    #取出倒数第二个字段的重复次数
   2000 i686
   2938 noarch
      1 TRANS.TBL
   4069 x86_64
[[email protected] Packages]#

高级编辑命令:

h:把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g:把保持空间中的内容覆盖至模式空间中

G:把保持空间中的内容追加至模式空间中

x:把模式空间中的内容与保持空间中的内容互换

n:覆盖读取匹配到的行的下一行至模式空间中

N:追加读取匹配到的行的下一行至模式空间中

d:删除模式空间中的行

D:删除多行模式空间中的所有行

示例:

1.显示文件偶数行

[[email protected] Packages]# sed -n ‘n;p‘ /etc/fstab 
#    This is two line.
#
# Created by anaconda on Thu Jul 21 12:06:23 2016
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
#
UUID=1b0c5c77-c343-4139-9533-0ef66ffe5d39 /boot                   xfs     defaults        0 0
UUID=6cfc5ecc-625f-4a4c-936f-95e4bab93dd6 swap                    swap    defaults        0 0
[[email protected] Packages]#

2.文件逆序显示

[[email protected] Packages]# sed ‘1!G;h;$!d‘ /etc/fstab 
UUID=6cfc5ecc-625f-4a4c-936f-95e4bab93dd6 swap                    swap    defaults        0 0
UUID=e70e4b66-c716-4d00-a483-4771fea4a9c1 /testdir                xfs     defaults        0 0
UUID=1b0c5c77-c343-4139-9533-0ef66ffe5d39 /boot                   xfs     defaults        0 0
UUID=89ec9224-65c7-4461-9350-9d5e016d016c /                       xfs     defaults        0 0
#
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
#
# Created by anaconda on Thu Jul 21 12:06:23 2016
# /etc/fstab
#
#     This is three line.
#    This is two line.
#  This is one line.
[[email protected] Packages]#

3.显示文件的最后两行内容

[[email protected] Packages]# nl /etc/fstab | sed ‘$!N;$!D‘
    13UUID=e70e4b66-c716-4d00-a483-4771fea4a9c1 /testdir                xfs     defaults        0 0
    14UUID=6cfc5ecc-625f-4a4c-936f-95e4bab93dd6 swap                    swap    defaults        0 0
[[email protected] Packages]#

4.将文件的空白行删除,并且在每行后面添加空白行

[[email protected] ~]# sed ‘/^$/d;G‘ /etc/fstab 
#  This is one line.
#    This is two line.
#     This is three line.
#
# /etc/fstab
# Created by anaconda on Thu Jul 21 12:06:23 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=89ec9224-65c7-4461-9350-9d5e016d016c /                       xfs     defaults        0 0
UUID=1b0c5c77-c343-4139-9533-0ef66ffe5d39 /boot                   xfs     defaults        0 0
UUID=e70e4b66-c716-4d00-a483-4771fea4a9c1 /testdir                xfs     defaults        0 0
UUID=6cfc5ecc-625f-4a4c-936f-95e4bab93dd6 swap                    swap    defaults        0 0
[[email protected] ~]#

5.显示奇数行

[[email protected] ~]# sed ‘n;d‘ fstab 
#  This is one line.
#     This is three line.
# /etc/fstab
#
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
UUID=89ec9224-65c7-4461-9350-9d5e016d016c /                       xfs     defaults        0 0
UUID=e70e4b66-c716-4d00-a483-4771fea4a9c1 /testdir                xfs     defaults        0 0
[[email protected] ~]#
时间: 2024-10-12 22:58:34

sed行编辑器的相关文章

grep进阶与sed行编辑器

grep进阶与sed行编辑器 上一篇(http://nearlv.blog.51cto.com/2432295/1729198)我们介绍了grep的一些基本的使用方法,其它grep还是一些比较高级的用法,让我们一起来看看. 先来看一下下面例子的运行结果: 相同的命令输出的结果有点不一样,对,这里就是利用"alias"去设置命令的别名,语法格式为"alias="command""即可,可能通过直接在命令行输入"alias"查看当

sed 行编辑器

sed:行编辑器,默认不处理源文件. -i 直接修改源文件 -eSCRIPT–e SCRIPT 可以同时执行多个脚本 -f/PATH/TO/SED_SCRIPT sed –f /path/to/scripts file -r:表示使用扩展正则表达式 history |sed 's/[[:space:]]//'  使用sed命令history的行空格删掉 1.sed '源地址+编辑命令' 文件 地址:1,100 $最后一行 $-1 倒数第二行 2模式:/正则表达式 /^root/ 3/模式1/,/

sed 行编辑器知识汇总

sed 是一种行编辑器,一次处理一行内容,处理时把当前处理的行存储在一个临时缓冲区,称为"模式空间"(pattern space),接着用sed命令处理模式空间中的内容,处理完成后把模式空间中的内容打印到屏幕上,完成一行的编辑.    注:默认情况下sed并不做原地修改,不会修改源文件 sed有两种使用方法 sed [options] command file(s)    直接编写处理命令处理    sed [options] -f scriptfile file(s)    使用预先

行编辑器:sed

sed 行编辑器 语法:sed [option]... 'script' inputfile... 命令选项(option): 常用选项: -n:不输出模式空间内容到屏幕,即不自动打印 (关闭自动打印) -e: 多点编辑 -f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本 (调用脚本文件 ) -r:支持使用扩展正则表达式 -i:直接修改原文件 -i.bak: 先备份文件到.bak并在原处编辑 script: '地址命令' 地址定界: 使用行号,可以是一个简单数字,或是一个行号范

sed命令行编辑器 【原创】

sed命令行编辑器 sed是非交互式的编辑器,它按行处理对象文件,但不修改处理文件本身,而是逐行读入文件内容并在临时缓存区保存副本并对其进行处理.处理完成每一行就将该行目标内容打印到屏幕,并将该缓存区内容删除,然后读入下一行进行处理.另外需要注意的是,和grep不同,sed不论是否知道指定的模式,它的退出状态都是0(Linux中通常代表真).只有存在语法错误时,sed的退出状态才不是0. 用单引号,双引号没有用 默认修改原文件, -n 静默显示 -i 修改源文件 -e 脚本 -f 指定文件,里面

文本处理三剑客之sed流编辑器

流编辑器 sed 模式空间,默认不编辑原文件,仅对模式空间中的数据做处理:处理结束后,将模式空间中数据打印至屏幕.sed是一个行编辑器. sed [options] 'Address Command' file ... Option: -n: 静默模式, 不再默认显示模式空间中的内容-i: 直接修改原文件-e SCRIPT 可以同时执行多个脚本, 操作-f /PATH/TO/SED_SCRIPT  如: sed -f /path/to/scripts file ( 指定 sed 的脚本文件)-r

Linux基础之sed流编辑器详解

之前介绍了三大文本编辑器的grep,这里介绍比grep功能更强的sed流编辑器 sed是什么? sed是Stream EDitor的缩写,man中对sed的简洁为 sed - stream editor for filtering and transforming text 它的主要功能是对文本的过滤与替换. sed的工作原理 sed的工作过程:sed是一个流编辑器,所谓流编辑器是指sed每次只从文件或stdin中读入一行,将读入的行保存至模式空间然后根据指定的要求对其进行处理,并将处理后的结果

三剑客之SED行天下

三剑客之SED行天下 3个月前 (02-16) 老男孩 Linux命令 9评论 来源:本站原创 2222℃ 字体:小中大 功能说明 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. [[email protected] ~]# sed --version #→ sed软件版本 GNU sed version 4.2.1 语法格式 sed [options] [sed-commands] [input-file] sed [

文本处理_分割_排序_统计_行编辑器

2017年1月10日, 星期二 文本处理_分割_排序_统计_行编辑器 文本文件: Tom:23:male:2013/05/06 cut: -d: 指定字段分隔符,默认是空格 -f: 指定要显示的字段 -f 1,3 -f 1-3 文本排序:sort -n:数值排序 -r: 降序 -t: 字段分隔符 -k: 以哪个字段为关键字进行排序 -u: 排序后相同的行只显示一次 -f: 排序时忽略字符大小写 文本统计:wc (word count) -l -w -c -L sed基本用法: sed: Stre