9.5 sed(下)

sed工具

  • sed '1'd test.txt
  • sed '1,3'd test.txt
  • sed '/oot/'d test.txt
  • sed '1,2s/ot/to/g' test.txt
  • sed 's#ot#to#g' test.txt
  • sed 's/[0-9]//g' test.txt
  • sed 's/[a-zA-Z]//g' test.txt
  • sed -r 's/(rot)(.*)(bash)/\3\2\1/' test.txt
  • sed 's/^.*$/123&/' test.txt
  • sed -i 's/ot/to/g' test.txt

sed命令删除指定的行

  • sed '1,20'd test.txt //删除指定的行(但实质并未删除,只是将剩余的行列出来——>使用wc -l命令可查看原有的行并未删除)
[root@hf-01 sed]# sed '1,20'd test.txt
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
asfhan
dannnnnn
hhhhhao
[root@hf-01 sed]# wc -l test.txt
26 test.txt
  • sed -i '1,20'd test.txt //删除指定的行(在加了-i参数后,会把文件内容删除)
[root@hf-01 sed]# cp test.txt test.txt.bak
[root@hf-01 sed]# sed -i '1,20'd test.txt
[root@hf-01 sed]# wc -l test.txt
6 test.txt
[root@hf-01 sed]# 

  • 总结,sed删除指定的行
  • 在直接 sed '1,20'd test.txt 仅仅是剩余的行列出到屏幕上,而其他的行不列,并未删除文件
  • 而在加了 -i 参数后,sed -i '1,20'd test.txt 会把文件内容删除更改

sed命令 指定内容删除

  • sed -i '/sshd/'d test.txt //加了-i 参数后,会直接修改文件内容
[root@hf-01 sed]# sed -i '/sshd/'d test.txt    //会直接修改文件内容,删除sshd这一行
[root@hf-01 sed]# cat test.txt
mysql:x:1000:1000::/home/mysql:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
asfhan
dannnnnn
hhhhhao
[root@hf-01 sed]# 

sed命令 查找替换 功能

  • sed 命令的查找替换和vim的查找替换相似
  • sed '1,5s/nologin/lala/g' test.txt //在1到5行中,把nologin替换成lala
    • 会把这个文件中所有内容都打印出来
    • g表示全局替换
[root@hf-01 sed]# sed '1,5s/nologin/lala/g' test.txt    //把文件中1到5行中的nologin替换成lala
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/lala
adas:124:bdsf:rto:pass
daemon:x:2:2:daemon:/sbin:/sbin/lala
dfdf:rggo:124
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
等等等,只截取了一部分
[root@hf-01 sed]# 
  • 正则表达式中查找替换
  • sed -r '1,5s/ro+/r/g' test.txt //将文件的1到5行中的ro+替换成r
    • 因为有特殊符号,所以得使用 -r 参数
    • (在使用cat test.txt的时候,会发现并没有真实替换,只是打印出在屏幕上替换了)
[root@hf-01 sed]# sed -r '1,5s/ro+/r/g' test.txt    //将文件的1到5行中的ro+替换成r
rt:x:0:0:rt:/rt:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adas:124:bdsf:rto:pass
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dfdf:rggo:124
等等等,只截取了一部分

  • sed查找替换总结:
  • 若里面有特殊符号,则需要脱义 - 只能先使用-ri参数,而不能-ir参数(-r参数脱义特殊符号,-r参数直接修改文件内容) - 或者在特殊符号前面使用 \

sed命令 第一段和最后一段替换位置

  • head test.txt |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' 把文件的前10行的第一段和最后一段进行替换位置
    • head 默认查看前10行
    • s 前不指定范围,就表示全部
    • .* 表示贪婪匹配
[root@localhost sed]# head 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
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
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
对比
[root@localhost sed]# head test.txt |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator
[root@localhost sed]# 
  • 需求:把第一段和最后一段替换位置,因为内容是用 : 冒号分割的,所以可以使用 : 冒号作为分割对象
    • 前面用小括号括的内容,后面的就要用反斜杠 \ 加数字 去表示它

sed命令 将/root 替换成123 需要脱义

  • head tset.txt |sed 's//root/123/g' //在文件前5行,把/root 替换成 123
[root@localhost sed]# head test.txt |sed 's/\/root/123/g'
root:x:0:0:root:123:/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
[root@localhost sed]#
  • 若替换的内容中有多个/ ,比如/sbin/nologin 替换成123
    • 则需要使用脱义符号 \ ,或者使用@
  • head test.txt |sed 's//sbin/nologin/123/g' //替换/sbin/nologin内容中有多个 /
[root@localhost sed]# head -n5 test.txt |sed 's/\/sbin\/nologin/123/g'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:123
daemon:x:2:2:daemon:/sbin:123
adm:x:3:4:adm:/var/adm:123
lp:x:4:7:lp:/var/spool/lpd:123
[root@localhost sed]# 
  • 也可以替换分隔符使用 @ 或者 # 替代——>只要可以去区分开就可以
[root@localhost sed]# head - n5 test.txt |sed 's@/sbin/nologin@123@g'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:123
daemon:x:2:2:daemon:/sbin:123
adm:x:3:4:adm:/var/adm:123
lp:x:4:7:lp:/var/spool/lpd:123

[root@localhost sed]# head test.txt |sed 's#/sbin/nologin#123#g'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:123
daemon:x:2:2:daemon:/sbin:123
adm:x:3:4:adm:/var/adm:123
lp:x:4:7:lp:/var/spool/lpd:123
[root@localhost sed]# 

sed命令 删除文件中所有英文字母 's/[a-zA-Z]//g'

  • head -n5 test.txt |sed 's/[a-zA-Z]//g' //删除前5行中所有的英文字母
    • 只需要替换成 空 即可,就会删除所有的英文字母
[root@localhost sed]# head -n5 test.txt |sed 's/[a-zA-Z]//g'    //删除前5行中所有的英文字母
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
[root@localhost sed]# 

sed命令在 所有行前面加上字符串

  • head -n5 test.txt |sed -r 's/(.*)/aaa:&/' //在前5行中,所有行前面添加aaa字符
    • (.*) 表示一整行
    • &符号就表示前面的小括号
[root@localhost sed]# head -n5 test.txt |sed -r 's/(.*)/aaa:&/'    //在前5行中,所有行前面添加aaa字符
aaa:root:x:0:0:root:/root:/bin/bash
aaa:bin:x:1:1:bin:/bin:/sbin/nologin
aaa:daemon:x:2:2:daemon:/sbin:/sbin/nologin
aaa:adm:x:3:4:adm:/var/adm:/sbin/nologin
aaa:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost sed]# 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安恒网络空间安全讲武堂

二进制学习系列-栈溢出之2018红帽杯

程序就是让你输名字和职业,然后有一段可以给你修改的选项,是不是觉得每个fgets都限制了个数,所以溢出点在哪里?

17520
来自专栏FreeBuf

使用Burpsuite扩展Hackvertor绕过WAF并解密XOR

最近,我一直在忙于开发自己的一个Burp扩展Hackvertor。这是一个具有基于标签转换功能的编码器,相比起Burp内置的解码器它的功能要强大的多。通过标签的...

14710
来自专栏丁科的专栏

pytorch 学习笔记之编写 C 扩展

在之前的文章中,我们已经了解了如何自定义 Module。这篇主要讲解pytorch利用 CFFI 进行 C 语言扩展。包括两个基本的步骤(docs):编写 C ...

1K00
来自专栏智能合约

base62编码

1K40
来自专栏deepcc

JavaScript检测IE浏览器(最短代码)

45880
来自专栏计算机视觉与深度学习基础

Leetcode 72 Edit Distance DP好题

Given two words word1 and word2, find the minimum number of steps required to c...

21790
来自专栏编程

说说正则表达式的使用

今日分享:正则表达式 一:正则表达式的定义及用途 正则表达式是一种特殊的字符串,字符串中的每个字符都含有特定的意义。使用者通过将正则中不同的字符组合成不同的字符...

20680
来自专栏机器学习从入门到成神

字符串面试题(三)— 把一个字符串的大写字母放到字符串的后面

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

21110
来自专栏一“技”之长

一个移动开发者的Mock数据之路 原

    在前端开发中,很大一部分工作都是将后台数据获取到后展示在前端界面上。如果接口是现成的,这个过程还相对容易一些,但是如果接口的开发和前端开发是同时进行的,...

7710
来自专栏DannyHoo的专栏

iOS开发中为NSNull的分类添加“属性”

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details...

16050

扫码关注云+社区

领取腾讯云代金券