day18-三剑客-sed

16952149-298845fa3deeeae5.png

三剑客——sed(增删改查)

grep的参数

grep 过滤
    -i
        不区分大小写
    -v
        取反
    -n
        显示行号
    -o
        显示每次grep匹配到的内容
    -E
        支持扩展正则
        egrep
    -w
        按照单词匹配
    -A
        显示grep找出的内容下几行
    -B
        显示grep找出的内容上几行
    -C
        同时显示grep找出的内天上下几行
    -l
        过滤时只显示文件名 不显示内容
    -R
        递归进行过滤
        grep -Rl 'oldboy'

sed---> stream editor 流编辑器

16952149-8e872692b3fc313b.png

※功能——增删改查

sed的参数
-n  取消默认输出
-l  修改文件内容
-r  支持扩展正则
-i.bak  先备份文件再修改文件内容

sed命令执行过程

16952149-a92f370102c52629.png

练习的时候先创建环境

[✡root@oldboy /tmp]# grep -n '.*' lidao.txt
 1:101,oldboy,CEO
 2:102,zhangyao,CTO
 3:103,Alex,COO
 4:104,yy,CFO
 5:105,feixue,CIO
 6:110,lidao,COCO
 \\空行

查看 p
---->print 根据行号进行查找
---->'3,6p' 根据行号范围进行查找
---->'/oldb.y/p'使用正则进行过滤
---->'/102/,/105/p' 使用正则表示范围

查看第五行
[✡root@oldboy /tmp]# sed -n '5p' lidao.txt 
105,feixue,CIO
查看第一行到第五行
[✡root@oldboy /tmp]# sed -n '1,5p' lidao.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
过滤a-z的行,类似grep
[✡root@oldboy /tmp]# sed -n '/[a-z]/p' lidao.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
找出带有oldboy和yy的行
第一种方法sed
[✡root@oldboy /tmp]# sed -rn '/oldbo|yy/p' lidao.txt 
101,oldboy,CEO
104,yy,CFO
第二种方法grep和egrep
[?root@oldboy /tmp]# grep 'oldboy\|yy' lidao.txt 
101,oldboy,CEO
104,yy,CFO
[?root@oldboy /tmp]# egrep 'oldboy|yy' lidao.txt 
101,oldboy,CEO
104,yy,CFO
找到以old开头CFO结尾的行
[✡root@oldboy /tmp]# sed -n '/old/,/CFO/p' lidao.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
以102开头的行和没有的内容,显示102开始到下面所有内容
[✡root@oldboy /tmp]# sed -n '/102/,/#没有的内容#/p' lidao.txt 
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO

增加
---->a 追加 在指定行后追加内容
---->i 追加 插入指定行的上面
---->c 把这一行内容先清空,再写入

给第三行下添加119,SB,UFO(显示临时)  
[?root@oldboy /tmp]# sed '3a119,SB,UFO' lidao.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
给第三行下永久添加119,SB,UFO
[✡root@oldboy /tmp]# sed -i '3a119,SB,UFO' lidao.txt 
[✡root@oldboy /tmp]# cat lidao.txt 
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
在第一行上添加101,oldboy,CEO 
[✡root@oldboy /tmp]# sed -i '1i101,oldboy,CEO' lidao.txt
[✡root@oldboy /tmp]# grep '.*' lidao.txt 
101,oldboy,CEO
101,oldboy,CEO
102,zhangyao,CTO
101,oldboy,CEO
103,Alex,COO
120,XOO
104,yy,CFO
105,feixue,CIO
在源文件第四行下添加120,chenxing,备份一份到当前目录lidao.txt.bak
[✡root@oldboy /tmp]# sed -i.bak '4a120,chenxing,XOO' lidao.txt 
[✡root@oldboy /tmp]# ll lidao.txt.bak 
-rw-r--r-- 1 root root 106 Apr 25 16:00 lidao.txt.bak
[✡root@oldboy /tmp]# cat lidao.txt.bak  \\备份的文件未添加,在源文件添加了新内容
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO

删除
---->d 删除指定空行

删除第四行
[✡root@oldboy /tmp]# sed '4d' lidao.txt
oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
删除lidao.txt中的空行
第一种显示空行
[✡root@oldboy /tmp]# sed -n '/^$/p' lidao.txt
\\空行
[✡root@oldboy /tmp]# 

第二种不显示空行
[?root@oldboy /tmp]# sed -r '/^$/d' lidao.txt
oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[?root@oldboy /tmp]# 

第三种取反!
[✡root@oldboy /tmp]# sed -n '/^$/!p' lidao.txt
oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[✡root@oldboy /tmp]# 

第四种awk的方法
[✡root@oldboy /tmp]# awk '/^$/' lidao.txt  \\显示空行

[✡root@oldboy /tmp]# 
[✡root@oldboy /tmp]# awk '!/^$/' lidao.txt  \\不显示空行
oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[✡root@oldboy /tmp]# 

↓↓不显示文件/etc/ssh/sshd_config 的空行或以#号开头的行↓↓

1.egrep
[✡root@oldboy /tmp]# egrep -v '^$|^#' /etc/ssh/sshd_config 
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile  .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem   sftp    /usr/libexec/openssh/sftp-server
[✡root@oldboy /tmp]# 
2.sed
[✡root@oldboy /tmp]# sed -nr '/^$|^#/!p' /etc/ssh/sshd_config 
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile  .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem   sftp    /usr/libexec/openssh/sftp-server
[✡root@oldboy /tmp]# 

替换修改
---->s替换
---->g全局替换:
---->()后向引用在前面(##)把你要的内容保护起来,在后面俩个##之间通过/数字来引用,\1表示显示第一个括号内容

※格式
s#内容#内容#g
s@内容@内容@g
s/内容/内容/g
echo 123456 |sed 's#123456#<123456>#g'
echo 123456 |sed 's@123456@<123456>@g'

把oldboy替换为alex
[?root@oldboy /tmp]# sed 's#oldboy#alex#g' lidao.txt
alex,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
把oldboy替换为空/删除
[✡root@oldboy /tmp]# sed 's#oldboy##g' lidao.txt
,CEO
102,zhangyao,CTO
103,Alex,COO
119,SB,UFO
120,chenxing,XOO
120,XOO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
想要结果是<123456>
1.
[?root@oldboy /tmp]# echo 123456 |sed 's#123456#<123456>#g'
<123456>
2.
[✡root@oldboy /tmp]# echo 123456  |sed -r 's#(.)#\1#g'
123456
显示出12<34>56
1.
[?root@oldboy /tmp]# echo 123456  |sed -r 's#(12)(34)(56)#\1<\2>\3#g'
12<34>56
2.
[✡root@oldboy /tmp]# echo 123456  |sed -r 's#(3.)#<\1>#g'
12<34>56
显示<1><2><3><4><5><6>
1.
[✡root@oldboy /tmp]# echo 123456  |sed -r 's#(.)#<\1>#g'
<1><2><3><4><5><6>
2.
[✡root@oldboy /tmp]# echo 123456  |sed -r 's#(.)(.)(.)(.)(.)(.)#<\1><\2><\3><\4><\5><\6>#g'
<1><2><3><4><5><6>

你可能感兴趣的:(day18-三剑客-sed)