linux文本处理三剑客之sed
Posted 拼命姑娘fh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux文本处理三剑客之sed相关的知识,希望对你有一定的参考价值。
上一节我们已经学习过了grep,今天来学习sed。它是按照script的指令,来处理,编辑一个或多个文本文件,简化对文件的反复操作,编写转换程序等。
sed用法
sed 选项 动作 输入文件
参数说明:
-n 不输出到屏幕,不打印(默认打印)
-e 多点编辑输入的文本文件
-f 以选项中指定的script文件来处理输入的文本文件
-r 扩展正则表达式
-h 显示帮助
-v 显示版本信息
-i sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!
实例:
-n :
[[email protected] ~]# seq 1 10 |sed -n ‘8p‘ 8 [root@localhost ~]# seq 1 10 |sed -n "$[$(seq 1 10|wc -l)-1]p" 9 #输出倒数第二行
-e:
[[email protected] ~]# sed -e 2adesk e how are you? apple banana apple desk wine tea juice desk chair
-r:
[[email protected] app]# cat /etc/passwd |sed -r ‘s/(r..t).*1/hello/g‘ hello:/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
动作说明:
a 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c 取代 把指定行内容替换
d 删除 把指定行删除
i 插入 i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p 打印 亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s 取代 可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!
= 打印行号
nl 显行号
1.以行为单位的新增/删除
将 /etc/passwd 的内容复制到/app目录下,列出并且列印行号。
-a 在第二行后(亦即是加在第三行)加上drink tea字样!
[[email protected] app]# nl /etc/passwd | sed ‘2a drink tea‘ 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin drink tea 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
-i 那如果是要在第二行前
[[email protected] app]# nl /etc/passwd | sed ‘2i drink tea‘ 1 root:x:0:0:root:/root:/bin/bash drink tea 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
-d 第 2~5 行删除!
[[email protected] app]# nl /etc/passwd |sed ‘2,5d‘ 1 root:x:0:0:root:/root:/bin/bash 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 operator:x:11:0:operator:/root:/sbin/nologin 11 games:x:12:100:games:/usr/games:/sbin/nologin
sed 的动作为 ‘2,5d‘ ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~ 另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!同时也要注意的是, sed 后面接的动作,请务必以 ‘‘ 两个单引号括住喔
2.以行为单位的替换与显示
-c 将第2-5行的内容取代成为『No 2-5 number』呢?
[[email protected] app]# nl /etc/passwd | sed ‘2,5c No 2-5 number‘ 1 root:x:0:0:root:/root:/bin/bash No 2-5 number 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
3.数据的搜寻并显示
搜索 /etc/passwd有root关键字的行
[[email protected] app]# nl /etc/passwd | sed -n ‘/root/p‘ 1 root:x:0:0:root:/root:/bin/bash 10 operator:x:11:0:operator:/root:/sbin/nologin
4.数据的搜寻并替换
除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:
sed ‘s/要被取代的字串/新的字串/g‘
[[email protected] app]# ifconfig ens33|sed -n ‘2p‘|sed ‘s/^.*inet//g‘|sed ‘s/net.*$//g‘ 172.18.254.169
5.多点编辑
一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell。-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell
[[email protected] app]# nl /etc/passwd | sed -e ‘3,$d‘ -e ‘s/bash/blueshell/‘ 1 root:x:0:0:root:/root:/bin/blueshell 2 bin:x:1:1:bin:/bin:/sbin/nologin
6.地址定界:
(1) 不给地址:对全文进行处理
(2) 单地址:
#: 指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
(3) 地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步进
1~2 奇数行
2~2 偶数行
高级用法:
h 模式空间覆盖至保持空间
H 模式空间追加至保持空间
g 保持空间覆盖至模式空间
G 保持空间追加至模式空间
x 保持空间和模式空间内容互换
n 行的下一行覆盖至模式空间
N 行的下一行追加至模式空间
D 保留最后一行
d 删除模式空间行
例子:
(1)输出偶数行
[[email protected] ~]# seq 1 8 |sed -n ‘n;p‘ 2 4 6 8
(2)只显示奇数行
[[email protected] ~]# seq 1 10 |sed ‘n;d‘ 1 3 5 7 9
(3)倒序输出
[[email protected] ~]# seq 1 10 |sed -n ‘1!G;h;$p‘ 10 9 8 7 6 5 4 3 2 1
(4)输出倒数后两行
[[email protected] ~]# seq 1 10 |sed ‘$!N;$!D‘ 9 10
(5)空行删除,每行后加一个空行,即保证每行后只有一个空行
[[email protected] ~]# cat seq.txt |sed ‘/^$/d;G‘ 1 2 3 4 5 6
以上是关于linux文本处理三剑客之sed的主要内容,如果未能解决你的问题,请参考以下文章