sed -i 单引号中嵌套双引号_Linux删除文件指定行:学sed=增删改查

在某些操作下我们需要提取文件信息,常规我们使用grep“XXX”

与其相反,在某些情况下我们需要删除某些我们不需要的信息

2cb33d4ac0f1f68038da2632b0441e05.png

以上信息是我不需要的,我们可以通过>直接生成一个新文件

当我们需要对原文件进行剔除这部分信息的时候。

删除包含指定关键字的行

sed '/eye/d' trait_name_num_trans.txt >except_eye.txt

c55fb62c3da2943eda52ed708c82d632.png

也可以删除指定行

sed '2d'

更多sed资料:

sed:Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模式的内容输入到屏幕上。还可以对原文件改动,但是不会再屏幕上返回结果。

sed命令的语法格式:

sed的命令格式:sed [option] 'sed command'filename

sed的脚本格式:sed [option] -f 'sed script'filename

sed命令的选项(option):

-n :只打印模式匹配的行

-e :直接在命令行模式上进行sed动作编辑,此为默认选项

-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作

-r :支持扩展表达式

-i :直接修改文件内容

x

x为行号

x,y

表示行号从x到y

/pattern

查询包含模式的行

/pattern /pattern

查询包含两个模式的行

pattern/,x

在给定行号上查询包含模式的行

x,/pattern/

通过行号和模式查询匹配的行

x,y!

查询不包含指定行号x和y的行

fe7e001dd5ac69c50be0901f18ea3968.png

对文件的操作无非就是”增删改查“,怎样用sed命令实现对文件的”增删改查“,玩转sed是写自动化脚本必须的基础之一。

sed命令打印文件信息(查询):

df963b6c71a34c07011ee7d2558b1329.png

07881841ac548bbcfb2216900fe40d8f.png

对每个文件进行删除

d8a56f04616b68e027d67a05712eb6ab.png

打印某几行

c3a89ed39adf31a257e09f84a8ed0d0b.png

sed命令实现对文件内容的添加:(对源文件添加的话就用-i参数):

  1. ####sed命令可以实现的添加######  

  2. #1)匹配行的行首添加,添加在同行  

  3. #2)匹配行的行中的某个字符后添加  

  4. #3)匹配行的行尾添加字符  

  5. #4)匹配行的行前面行添加  

  6. #5)匹配行的行后面行添加  

  7. #6)文件的行首添加一行  

  8.   [root@jie1 ~]# sed -i '1 i\sed command start' myfile  

  9. #7)文件的行尾追加一行  

  10.   [root@jie1 ~]# sed -i '$a \sed command end' myfile  

匹配字符,增加字符任意位置

370fbdaa8dffe1d1da684ffe5cabbc5d.png

68324175aaeffdfd031377fccdb60a10.png

5449b9c2f029d057a9be789959f3beb8.png

a2a9f466a1cb5b2e4e5816d00a2186f1.png

81170e6d90d9a29219f8875b1a119431.png

fbfe1efdc7c88ad1b5cda3f2ce75a166.png

ec31b78597d4ab2d0537f168136e2b6d.png

3dfcbbd11b8e01397ffdc1a3e82e6ea5.png

7717d90cf9b9e740eafccc083e7c811d.png

sed命令实现对文件内容的删除:(对源文件直接删除用-i参数):

sed的删除操作是针对文件的行,如果想删除行中的某个字符,那就用替换(别急,替换稍后就讲,而且替换是sed最常用的)

5ca50b848b15d0dc31977f0a8708edbb.png

f638bb545107e7711d47978a0ccf68a5.png

b102c9a86a316b54a61352035e60f424.png

af7d3fee7c44149bc5c0525dd914aa6c.png

重点:sed命令实现对文件内容的替换(替换是在shell自动化脚本中用到最多的操作)

  1. #================源文件里面的内容===============================  

  2. [root@jie1 ~]# cat test  

  3. anonymous_enable=YES  

  4. write_enable=YES  

  5. local_umask=022  

  6. xferlog_enable=YES  

  7. connect_from_port_20=YES  

  8. root:x:0:0:root:/root:/bin/bash  

  9. bin:x:1:1:bin:/bin:/sbin/nologin  

  10. daemon:x:2:2:daemon:/sbin:/sbin/nologin  

  11. adm:x:3:4:adm:/var/adm:/sbin/nologin  

  12. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin  

  13. DEVICE="eth0"  

  14. BOOTPROTO="static"  

  15. HWADDR="00:0C:29:90:79:78"  

  16. ONBOOT="yes"  

  17. IPADDR=172.16.22.1  

  18. NETMASK=255.255.0.0  

  19. #======================================================================  

  20. [root@jie1 ~]# sed -i '/DEVICE/c\Ethernet' test   

  21.         #匹配DEVICE的行,替换成Ethernet这行  

  22. [root@jie1 ~]# sed -i 's/static/dhcp/' test       

  23.         #把static替换成dhcp(/,@,#都是前面所说的地址定界符)  

  24. [root@jie1 ~]# sed -i '/IPADDR/s@22\.1@10.12@' test  

  25.         #匹配IPADDR的行,把22.1替换成10.12由于.号有特殊意义所有需要转义  

  26. [root@jie1 ~]# sed -i '/connect/s#YES#NO#' test   

  27.         #匹配connect的行,把YES替换成NO  

  28. [root@jie1 ~]# sed -i 's/bin/tom/2g' test         

  29.         #把所有匹配到bin的行中第二次及第二次之后出现bin替换成tom  

  30. [root@jie1 ~]# sed -i 's/daemon/jerry/2p' test    

  31.         #把所有匹配到bin的行中第二次出现的daemon替换成jerry,并在生产与匹配行同样的行  

  32. [root@jie1 ~]# sed -i 's/adm/boss/2' test         

  33.         #把所有匹配到adm的行中仅仅只是第二次出现的adm替换成boss  

  34. [root@jie1 ~]# sed -i '/root/{s/bash/nologin/;s/0/1/g}' test  

  35.         #匹配root的行,把bash替换成nologin,且把0替换成1  

  36. [root@jie1 ~]# sed -i 's/root/(&)/g' test                   

  37.         #把root用括号括起来,&表示引用前面匹配的字符  

  38. [root@jie1 ~]# sed -i 's/BOOTPROTO/#BOOTPROTO/' test        

  39.         #匹配BOOTPROTO替换成#BOOTPROTO,在配置文件中一般用于注释某行  

  40. [root@jie1 ~]# sed -i 's/ONBOOT/#&/' test                   

  41.         #匹配ONBOOT的行的前面添加#号,在配置文件中也表示注释某行  

  42. [root@jie1 ~]# sed -i '/ONBOOT/s/#//' test                  

  43.         #匹配ONBOOT的行,把#替换成空,即去掉#号,也一般用作去掉#注释  

  44. #================执行以上sed命令之后文件显示的内容====================  

  45. [root@jie1 ~]# cat test  

  46. anonymous_enable=YES  

  47. write_enable=YES  

  48. local_umask=022  

  49. xferlog_enable=YES  

  50. connect_from_port_20=NO  

  51. (root):x:1:1:(root):/(root):/bin/nologin  

  52. bin:x:1:1:tom:/tom:/stom/nologin  

  53. daemon:x:2:2:jerry:/sbin:/stom/nologin  

  54. daemon:x:2:2:jerry:/sbin:/stom/nologin  

  55. adm:x:3:4:boss:/var/adm:/sbin/nologin  

  56. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin  

  57. Ethernet  

  58. #BOOTPROTO="dhcp"  

  59. HWADDR="00:0C:29:90:79:78"  

  60. ONBOOT="yes"  

  61. IPADDR=172.16.10.12  

  62. NETMASK=255.255.0.0  

2)读取一个文件到正在用sed操作的文件中

[java] view plain copy

  1. [root@jie1 ~]# cat myfile   #文件内容  

  2. hello world  

  3. i am li  

  4. how are you  

  5. li  

  6. [root@jie1 ~]# cat test  #将用sed操作的文件的内容  

  7. Ethernet  

  8. #BOOTPROTO="dhcp"  

  9. HWADDR="00:0C:29:90:79:78"  

  10. ONBOOT="yes"  

  11. IPADDR=172.16.10.12  

  12. NETMASK=255.255.0.0  

  13. [root@jie1 ~]# sed  -i '/Ethernet/r myfile' test  

  14.       #在匹配Ethernet的行,读进来另一个文件的内容,读进来的文件的内容会插入到匹配Ethernet的行后  

  15. [root@jie1 ~]# cat test  #再次查看用sed命令操作的行  

  16. Ethernet  

  17. hello world  

  18. i am li  

  19. how are you  

  20. li  

  21. #BOOTPROTO="dhcp"  

  22. HWADDR="00:0C:29:90:79:78"  

  23. ONBOOT="yes"  

  24. IPADDR=172.16.10.12  

  25. NETMASK=255.255.0.0  

  26. [root@jie1 ~]#  

学会sed的使用是写自动化shell脚本的基础,sed也是一个非常有用且重要的命令,是文本处理工具之一,以上是我自己学习总结的sed命令简单的用法,sed还有更高级的用法,也还在学习中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值