linux 行编辑器,sed行编辑器

Linux文本处理三剑客之一:sed(Stream Editor)流编辑器

sed:

将指定的文本文件内容逐行读取至sed的临时内存空间当中,称为"模式空间",而后逐行查看是否被sed的地址定界所匹配到,如果匹配,则执行相应的编辑操作,否则,默认将模式空间中的内容打印至标准输出

3c8ce6380daa33c267ccb0e2e66a02de.png

sed [OPTIONS…] 'script' FILE…

script:地址定界加编辑命令

OPTIONS:

-n:静默模式,不显示模式空间中的内容

-e 'script1' -e 'script2':可一个执行多个script,实现多点编辑

-f SCRIPT_FILE:从指定的文件中执行script

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

-i:直接编辑原文件(危险操作)

sed -i.bak 'script' FILE:在编辑原文件之前,将文件备份为FILE.bak

地址定界:

(1)空地址:表示编辑全文

(2)单地址:

#:指定的单个行

/pattern/:指定的模式匹配到的所有行

(3)地址范围:

#,#:指定行范围,例如: 1,3表示从第1行到第3行

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

#,/pattern/:从指定的行开始到第一个能够pattern匹配到的内容结束之间的所有行

/pat1/,/pat2/:从第一个被pat1匹配到的行开始到第一个被pat2匹配到的行结束之间的所有内容

(4)步进:~

1~2:表示奇数行

2~2:表示偶数行

编辑命令:

p:显示所匹配到的所有行

d:删除所匹配到的行

i \STRING:在匹配到的行前面追加新行,可使用\n换行符追加多行内容

a \STRING:在匹配到的行后面追加新航,可使用\n换行符追加多行内容

c \STRING:重新定义匹配到的行内容

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

r /PATH/TO/SOMFILE:将指定的文件内容追加至匹配到的行后面

=:在匹配到的行前面显示行号,行号单独占据一行

!:取反

地址定界!编辑命令

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

#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

#Installing ipw2200-firmware-3.1-4.el6.noarch

#Installing rootfiles-8.1-6.1.el6.noarch

#Installing man-pages-3.22-20.el6.noarch

#Installing words-3.0-17.el6.noarch

#*** FINISHED INSTALLING PACKAGES ***

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

#

#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

[root@CentOS6 ~]#

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

[root@CentOS6 ~]# echo /etc/sysconfig/network-scripts/ | sed 's@^\(.*\/\)\([^/]\+\/\?\)@\1@'    #取出目录名

/etc/sysconfig/

[root@CentOS6 ~]# echo /etc/sysconfig/network-scripts/ | sed 's@^\(.*\/\)\([^/]\+\/\?\)@\2@'    #取出基名

network-scripts/

[root@CentOS6 ~]#

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

[root@CentOS7 ~]# ifconfig | sed -n '/\/p' | sed -r 's@inet (([[:digit:]]+\.){3}[[:digit:]]+).*@\1@'

10.1.253.23

127.0.0.1

192.168.122.1

[root@CentOS7 ~]#

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

[root@CentOS7 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

[root@CentOS7 Packages]# ls | sed -r 's@.*\.([^.]+)\.rpm$@\1@' | sort | uniq -c    #取出倒数第二个字段的重复次数

2000 i686

2938 noarch

1 TRANS.TBL

4069 x86_64

[root@CentOS7 Packages]#

sed高级编辑命令:

h:将模式空间中的内容取出覆盖至保持空间当中

H:将模式空间中的内容取出追加至保持空间当中

g:将保持空间中的内容取出覆盖至模式空间当中

G:将保持空间中的内容取出追加至模式空间当中

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

n:将匹配到的行的下一行内容覆盖至模式空间当中

N:将匹配到的行的下一行内容追加至模式空间当中

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

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

示例:

1.显示文件偶数行

[root@CentOS7 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

[root@CentOS7 Packages]#

2.文件逆序显示

[root@CentOS7 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.

[root@CentOS7 Packages]#

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

[root@CentOS7 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

[root@CentOS7 Packages]#

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

[root@CentOS7 ~]# 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

[root@CentOS7 ~]#

5.显示奇数行

[root@CentOS7 ~]# 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

[root@CentOS7 ~]#

原创文章,作者:zhai796898,如若转载,请注明出处:http://www.178linux.com/32209

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值