文本三剑客—sed 基础

文本三剑客—sed 基础

       sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式的插入、删除或者替换数据中的文本。流编辑器则会自爱编辑器处理数据之前基于预习提供的一组规则来编辑数据流。

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行输入,要么存储在一个命令文件中。sed会执行下列操作:

(1)一次从输入中读取一行数据。

(2)根据所提供的编辑器命令匹配数据

(3)安装命令修改流中的数据

(4)将新的数据输出到STDOUT

在流编辑器将所有命令与一行数据匹配完毕后,它会读取下一行数据并重复这个过程。在流编辑器处理完流中的所有数据行后,它就会终止。

由于命令是按顺序逐行执行的,sed编辑器只需对数据流进行以便处理就可以完成编辑操作。这使得sed编辑器要比交互式编辑器快得多,可以快速完成对数据的自动修改。

用法

sed [option]… ‘script’ intputfile

1 常用选项

-n:不输出模式空间内容到屏幕,既不自动打印

-e:多点编辑

-f:/PATH/SCRIPT_FILE:从指定文件中读取编辑脚本

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

-i.bak:备份文件并原处编辑

script:

“地址命令”

2 地址定界

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

(2)单地址:

#:指定的行

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

(3)地址范围

#,#

#,+#

/pat1/,/pat2/

#,/pat1/

(4)~:步进

1~2 奇数行

2~2 偶数行

3 基本编辑命令

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

p:显示模式空间中的内容

a[]text:在指定行后面追加文本,支持使用n实现多行追加

i[]text:在行前面插入文本

c[]text:替换行为单行或多行文本

w /path/somefile:保存模式匹配的行至指定文件

r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后

= :为模式空间中的行打印行号

! :模式空间中匹配行取反处理

s/oldstr/newstr/:查找替换,支持使用其它分隔符,s@@@,s###

替换标记:

g:行内全局替换

p:显示替换成功的行

w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

4 常用命令

(1)打印第N行

[root@local ~]# sed -n '2p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin

(2)打印第N至M行

[root@local ~]# sed -n '1,4p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

(3)打印所有包含关键字string的行

[root@local ~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

(4)打印从第N行开始到有关键字string 的行

[root@local ~]# sed -n '1,/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

(5)显示空行行号

[root@local ~]# sed -n '/^$/=' /etc/fstab
1

(6)在关键字行后追加文字

[root@local ~]# sed '/root/asuperman' /etc/passwd
root:x:0:0:root:/root:/bin/bash
superman
bin:x:1:1:bin:/bin:/sbin/nologin
[……]
operator:x:11:0:operator:/root:/sbin/nologin
superman
games:x:12:100:games:/usr/games:/sbin/nologin
[……]

(7)在关键字string行前追击文字

[root@local ~]# sed '/root/isuperman' /etc/passwd
superman
root:x:0:0:root:/root:/bin/bash
[……]
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
superman
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
[……]

(8)替换行为单行或多行文本

[root@local ~]# sed '/root/csuperman' /etc/passwd
superman
bin:x:1:1:bin:/bin:/sbin/nologin
[……]
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
superman
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[……]

(9)删除指定行

[root@local ~]# sed '1,10d' /etc/passwd
或[root@local ~]# cat -n /etc/passwd |sed '1,10d'
11    games:x:12:100:games:/usr/games:/sbin/nologin
12    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13    nobody:x:99:99:Nobody:/:/sbin/nologin
14    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

(10)在指定行后追加文字

[root@local ~]# nl /etc/passwd |sed '2a tea'
1    root:x:0:0:root:/root:/bin/bash
2    bin:x:1:1:bin:/bin:/sbin/nologin
tea
3    daemon:x:2:2:daemon:/sbin:/sbin/nologin

(11)在关键字后追加文本

[root@local ~]# sed -n 's/root/&superman/p' /etc/passwd
rootsuperman:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/rootsuperman:/sbin/nologin

(12)在关键字前追击文本

[root@local ~]# sed -n 's/root/superman&/p' /etc/passwd
supermanroot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/supermanroot:/sbin/nologin

(13)全局查找替换

[root@local ~]# sed 's/UUID/hahaha/g' /etc/fstab
[……]
hahaha=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
hahaha=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
hahaha=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

(14)使用多个编辑器命令

[root@local ~]# sed -e 's/UUID/hahaha/g' -e 's/=/###/g' /etc/fstab
[……]
hahaha###227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
hahaha###7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
hahaha###12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

(15)修改前备份

先把/etc/fstab复制到当前目录下,以防止直接修改

[root@local ~]# cp /etc/fstab .
[root@local ~]# sed -i.bak 's/=/$$$$$/g' fstab
[root@local ~]# cat fstab fstab.bak
[……]
UUID$$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
UUID$$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
UUID$$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0
[……]
UUID=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
UUID=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
UUID=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

(16)从文件中读取编辑命令

[root@local ~]# cat script1.sed
s/=/$$$$/
s/UUID/mytest/
[root@local ~]# sed -f script1.sed fstab
[……]
mytest$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
mytest$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
mytest$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

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

(0)
linux is not unixlinux is not unix
上一篇 2017-05-15
下一篇 2017-05-15

相关推荐

  • 在CentOS中获取命令帮助

    在CentOS中获取命令帮助    在使用和学习CentOS系统中,当我们遇上不熟悉的命令却又需要了解它的详细用法的时候,我们需要获取帮助。除了借助他人和搜索引擎之外,自己通过查看系统帮助文档来解决问题是很重要的。下面就来介绍如何获取帮助以及简单的解决思路:    一、如何获取命令帮助 Linux提供多层次的命令帮助:…

    Linux干货 2016-07-27
  • 文本处理和正则表达式练习(0805)

    1、找出ifconfig命令结果中本机的所有IPv4地址     1.1 Centos7     1.2 Centos6 2、查出分区空间使用率的最大百分比值,取各分区利用率的数值 取出各分区数值 取出最大百分比 3、查出用户UID最大值的用户名、 UID及shell类型 4、查出/tmp…

    Linux干货 2016-08-06
  • bash基础特性及用户与组管理

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 2、取出最后登录到当前系统的用户的相关信息。 3、取出当前系统上被用户当做其默认shell的最多的那个shell。 4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxuser.txt文件中。 5、取出当前主机的I…

    2017-09-29
  • 终端类型

        终端是什么?终端不仅仅是显示器,还包括与之配套的键盘。在linux中表现为一个字符设备。Linux与用户交互时,直接向终端设备发送数据,数据就会被发送到屏幕上,用户通过键盘写的数据,就是向这个字符设备写数据,数据会同步显示到显示器上,回车后数据才会被linux执行命令。 终端类型 1串行口终端  &n…

    Linux干货 2016-10-17
  • 小巧精悍——常见文本处理工具用法及技巧总结

    小巧精悍——常见文本处理工具用法及技巧总结 Linux最重要的哲学思想就是:一切皆文件。可见文件及文件操作在Linux当中是多么的重要。在Linux系统中我们也会经常用到各种文本文件处理的操作,熟练使用这些小巧精悍的文本处理工具,在关键时刻往往展现非凡的神奇功效。常见文本处理小工具:cat、hexdump、nl、less、head、tail、cut、tr、r…

    Linux干货 2016-11-05
  • Linux目录配置及文件名种类与扩展名

    Linux目录配置及文件名种类与扩展名 一、FHS目录配置标准 在FHS标准诞生之前,由于有很多公司为Linux开发产品,而又各自有各自的存放路径,所以导致管理困难,因此诞生了FHS标准。 FHS 依据文件系统使用的频繁与否与是否允许用户随意更改,将目录定义成四种交互作用的形态。如下图 可分享的:可以分享给其他系统挂载使用。 不可分享:自…

    Linux干货 2016-08-02