Linux三剑客sed之增删改查
原创
©著作权归作者所有:来自51CTO博客作者BugMaker999的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
一、sed查找
格式
| 功能
|
‘1p’ ‘2p’
| 指定行号查找
|
‘1,5p’
| 指定行号范围查找
|
/[xyz]/p
| 找出包含字符xyz中任何一个的行,两个斜线中间支持正则
|
/10/,/20/p
| 查找从10开始到20结束
|
指定行号查找
sed -n '3p' oldboy.txt
sed '3p' oldboy.txt
sed '$p' oldboy.txt # $表示最后一行
指定行号范围查找
sed -n '1,3p' oldboy.txt
sed -n '4,$p' oldboy.txt # $表示最后一行
过滤
sed -n '/[45]/p' oldboy.txt # 找出包含字符4、5中任何一个的行
sed -n '/[0-9]/p' oldboy.txt # 查找包含0-9的行
sed -nr '/[0-9]+/p' oldboy.txt # 查找包含0-9字符任意组合的行
sed默认不支持扩展正则,-r
参数支持扩展正则
实际生产环境中,如果文件太大,我们一般不用vim/cat等命令查看,一般使用more/less/head/tail/grep/sed/awk等查看
查找11:02:13的日志
查找从11:02:13开始,到11:02:14结束的日志
sed -n '/11:02:13/,/11:02:14/p'
查找从11:02:13开始,到11:02:140结束的日志,由于文件中没有11:02:140,故不会停止,直到文件末尾
sed -n '/11:02:13/,/11:02:140/p'
二、sed删除
格式
| 功能
|
‘1d’ ‘2d’
| 指定行号删除
|
‘1,5d’
| 指定行号范围删除
|
/[xyz]/d
| 删除包含字符xyz中任何一个的行,两个斜线中间支持正则
|
/10/,/20/d
| 删除从10开始到20结束
|
按行删除和指定范围删除
sed '3d' oldboy.txt
sed '2,3d'
删除指定内容
使用d和p两种方式,删除注释行以及空行
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def fact(j):
sum = 0
if j == 0:
sum = 1
else:
sum = j * fact(j - 1) # 乘法
return sum
# 打印
print (fact(5)) # 打印
sed -r '/^$|^\s*#/d' 1.py # 删除空行和注释行
sed -nr '/^$|^\s*#/!p' 1.py # 空行和注释行不打印,!p表示不打印
三、sed增加
格式
| 功能
|
c
| replace,替代这行内容
|
a | append,向指定的行或每一行后面追加内容
|
i
| insert,向指定的行或每一行前面插入内容
|
实际上记一个a就可以
在指定行添加指定内容或进行替换
sed '3a 996,lidao996,UFO' oldboy.txt # 第3行后追加996,lidao996,UFO
sed '3i 996,lidao996,UFO' oldboy.txt # 第3行前插入996,lidao996,UFO
sed '3c 996,lidao996,UFO' oldboy.txt # 第3行替换为996,lidao996,UFO
向ssh_config最后一行追加以下配置:
UseDNS no
GSSAPIAUTCATION no
PermitRootLogin no
sed '$a UseDNS no\nGSSAPIAUTCATION no\nPermitRootLogin no'
四、sed替换
格式
| 功能
|
s#111#222#g
| 全局将111替换为222
|
s@111@222@g
| 全局将111替换为222
|
s/111/222/g
| 全局将111替换为222
|
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def fact(j):
sum = 0
if j == 0:
sum = 1
else:
sum = j * fact(j - 1) # 乘法
return sum
# 打印
print (fact(5)) # 打印
删除注释部分,只留下代码
sed -r 's@^$|^\s*#.*$|#.*$@@g' 1.py | egrep -v '^$'