sed 流编辑命令
1.命令功能
sed非交互式的流编辑器,sed不会修改源文件内容,除非重定向来保存输出结果;默认情况下所有的输出行都将被打印到屏幕上。
2.语法格式
sed [option] {script-only-if-no-other-script} [input-file]
sed 选项 ‘操作命令’ 输入文本
sed 常用选项说明
| 选项 | 功能 | 
| -n | 安静模式,只输出被sed处理的行 | 
| -f | 指定一个sed脚本文件到命令行执行 | 
| -r | sed使用扩展正则 | 
| -i | 直接修改文件读取的内容,不在屏幕上输出 | 
sed操作命令
| sed命令 | 功能 | 
| a\ | 在当前行后添加一行或多行文本 | 
| i\ | 在当前行插入文本 | 
| q | 结束或退出sed | 
| r | 从文件中读取输入行 | 
| c\ | 用文本替换或修改选中的行 | 
| d | 删除行 | 
| h[H] | 复制[追加]模式空间中的内容到缓存区 | 
| g | 将缓存区的内容,复制到模式空间,覆盖该处原有的内容 | 
| G | 将缓存区的内容,复制到模式空间,追加在原有内容后面 | 
| p | 打印行 | 
| 替换标志 | |
| s/regexp/replacement/ | 将regexp内容替换成replacement | 
| g | 在行内全局替换 | 
| p | 打印行 | 
| w | 将行写入文件 | 
| x | 交换暂存缓冲区与模式空间的内容 | 
| y | y/source/dest/ | 将字符转换成另一个字符(不能对正则表达式使用y命令) | 
3.使用范例
示例1 p命令,打印包含root的行
[root@localhost ~]# sed '/root/p' test.txt root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash #打印内容 bin:x:1:1:bin:/bin:/sbin/nologin
示例 2 n安静模式,只打印包含root的行
[root@localhost ~]# sed -n '/root/p' test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
示例3 d删除命令,删除行
[root@localhost ~]# cat -n test.txt 
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     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
     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
[root@localhost ~]# sed '3d' test.txt #第三行“daemon:x:2:2:daemon:/sbin:/sbin/nologin”被删除 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin
删除第1行到第3行
[root@localhost ~]# sed '1,3d' test.txt 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
删除包含root的行
[root@localhost ~]# sed '/root/d' test.txt #删除包含root的行 bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
示例4 替换:s命令
全局nologin替换成no
[root@localhost ~]# sed 's/nologin/no/g' test.txt #s表示替换,g表示全局 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/no daemon:x:2:2:daemon:/sbin:/sbin/no adm:x:3:4:adm:/var/adm:/sbin/no lp:x:4:7:lp:/var/spool/lpd:/sbin/no
注:如果没有g,只会替换每一行的第一个nologin。
示例5 a追加命令
在第2行后追加“hello boy welcome to linux”
[root@localhost ~]# sed '2a hello boy welcome to linux' test.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin hello boy welcome to linux #在第2行后追加内容 daemon:x:2:2:daemon:/sbin:/sbin/nologin
在第2行后追加2行“hello world\nwelcome to linux”
[root@localhost ~]# sed '2a hello world\nwelcome to linux' test.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin hello world #追加的第一行 welcome to linux #追加的第二行 daemon:x:2:2:daemon:/sbin:/sbin/nologin
示例6 i插入命令
在第2行位置插入”hello world”
[root@localhost ~]# sed '2i hello world' test.txt root:x:0:0:root:/root:/bin/bash hello world #在第2行插入的内容 bin:x:1:1:bin:/bin:/sbin/nologin
在第2行位置插入2行“hello world\nwelcome to linux”
[root@localhost ~]# sed '2i hello world\nwelcome to linux' test.txt root:x:0:0:root:/root:/bin/bash hello world #插入的第一行 welcome to linux #插入的第二行 bin:x:1:1:bin:/bin:/sbin/nologin
示例7 d删除命令
删除第2行
[root@localhost ~]# sed '2d' test.txt #源文件第二行的内容’ bin:x:1:1:bin:/bin:/sbin/nologin’
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost ~]# cat -n test.txt |sed '2d'
     1  root:x:0:0:root:/root:/bin/bash
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
删除第2行到第4行
[root@localhost ~]# cat -n test.txt |sed '2,4d'
     1  root:x:0:0:root:/root:/bin/bash
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
示例8 p输出指定行
输出文件第2行内容
[root@localhost ~]# cat -n test.txt |sed '2p'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     2  bin:x:1:1:bin:/bin:/sbin/nologin    #p输出的内容
示例9 sed 选项-i命令使用
-i 直接写入到文件里,不在屏幕上现象
在test.txt文件25行插入写入如下几行
hello boy
welcome to linux
linux is fun
thank you
[root@localhost ~]# sed -i  '25i hello boy\nwelcome to linux\nlinux is fun\nthank you' test.txt 
 [root@localhost ~]# cat -n test.txt |tail -7
    23  joe:x:502:502::/home/joe:/bin/bash
    24  chu:x:503:503::/home/chu:/bin/bash
    25  hello boy               #插入内容
    26  welcome to linux        #插入内容
    27  linux is fun            #插入内容
    28  thank you               #插入内容
    29  dbus:x:81:81:System message bus:/:/sbin/nologin
示例10 打印指定范围内的行
[root@localhost ~]# sed -n '/joe/,/chu/p' test.txt joe:x:502:502::/home/joe:/bin/bash chu:x:503:503::/home/chu:/bin/bash
示例11 修改:c命令
c命令将修改模式空间中的内容,模式空间中的内容被修改,源文件内容不变。
[root@localhost ~]# sed '/root/c hello boy\' test.txt hello boy bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@localhost ~]# cat test.txt #源文件内容 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
示例12 转换:y 命令
把root字符串对应转换成AAAA
[root@localhost ~]# sed 'y/root/AAAA/' test.txt AAAA:x:0:0:AAAA:/AAAA:/bin/bash bin:x:1:1:bin:/bin:/sbin/nAlAgin daemAn:x:2:2:daemAn:/sbin:/sbin/nAlAgin
示例13 取出网卡IP地址
[root@localhost ~]# ifconfig |sed -n '/inet addr/p' |cut -d ":" -f2 |cut -d ' ' -f1 172.16.2.10 127.0.0.1
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号