加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux中sed如何处理文本

发布时间:2016-10-13 20:28:49 所属栏目:Linux 来源:网络整理
导读:sed处理文本的方法 sed在处理文本时,会先读取第一个输入行,将编辑命令应用于输入行,然后读取下一个输入行,并应用编辑命令。sed总是处理最新版本的行,因此s

当行号所有地址提供时,则命令只会删除匹配的那一行。例如,下面的示例只会删除第一行:

[root@fanyue sed]# sed '1d' test

2 This is a cow.

3 This is a dog.

4 And this is a monkey!!!

行号指由sed维护的内部行数。该计数器不会因为多个输入文件而重置。因此,不管指定多少个输入文件,1只代表输入流的第一行,如果输入流是多个文件,那么1代表第一个输入文件的第一行。

同样输入流也只有一个最后的行。可以使用寻址符号$指定。下面的示例删除输入的最后一行:

[root@fanyue sed]# sed '$d' test

1 This is a pig.

2 This is a cow.

3 This is a dog.

$符号不要和正则表达式中的$混淆,在正则表达式作为地址提供时,这个命令只影响与这个模式匹配的行。正则表达式必须封闭在斜杠(/)中。下面的删除命令:

[root@fanyue sed]# sed '/!$/d' test

1 This is a pig.

2 This is a cow.

3 This is a dog.

只删除以!结尾的行。

如果提供两个地址,那么就指定了命令执行的范围。下面的示例展示了删除两个地址之间的所有行,两个地址以逗号隔开:

[root@fanyue sed]# sed '/cow/,/monkey/d' test

1 This is a pig.

它删除从一个模式匹配开始,到由第二种模式匹配的行(包括此行在内)为止的所有行。下面的命令删除了文件中从5行到最后一行的所有行:

[root@fanyue sed]# sed '5,$d' /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

可以混合使用行地址和模式地址:

1,/^$/d

本栏目更多精彩内容:http://www.bianceng.cn/OS/Linux/

sed没有办法先行判断第二个地址是否存在匹配的行,因此当命令执行后sed会从一个匹配的行开始应用命令,如果没有出现第二个匹配的行,那么将删除所有的行。

跟在地址后面的感叹号会反转匹配的意义:

[root@fanyue sed]# sed '1,2!d' test

1 This is a pig.

2 This is a cow.

sed使用大括号({})将一个地址嵌套在另一个地址中,或者在相同的地址上应用多个命令。如果想指定行的范围,然后在这个范围内指定另一个地址,则可以嵌套地址。例如:

[root@fanyue sed]# cat test
This is a pig.
-------------
This is a cow.
-------------
this is a cat.
-------------
This is a dog.
-------------
And this is a monkey!!!
[root@fanyue sed]# sed '/cow/,/dog/ {/^$/d; s/-/*/g}' test
This is a pig.
-------------
This is a cow.
*************
this is a cat.
*************
This is a dog.
-------------
And this is a monkey!!!

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读