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/修饰符:查找并替换,其分隔符可自定义,例如s@@@,s###等等

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

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

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

修饰符:

p:显示替换成功的内容

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

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

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

练习:

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

[root@CentOS7 ~]# cat /boot/grub2/grub.cfg | sed -r 's@^[[:space:]]+@@'

#

# 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文件中所有以#开头的行的行首的#号及#后面的所有空白字符

[root@CentOS7 ~]# cat /etc/fstab | sed -r 's@^#[[:space:]]+@@'

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

[root@CentOS7 ~]# 

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

[root@CentOS6 ~]# sed -r 's@^@#@' 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文件中不以#开头的行的行首增加#号

[root@CentOS6 ~]# sed -r 's@^[^#]@#&@' /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

#

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14085.html