Linux中sed如何处理文本
当行号所有地址提供时,则命令只会删除匹配的那一行。例如,下面的示例只会删除第一行: [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!!! (编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |