欢迎访问我的博客,你的支持,是我最大的动力!

sed命令的一些总结

Linux 小马奔腾 73℃ 评论
目录:
[显示]

sed的操作单元是行,所以可以用于处理超大的文本文件,基于流式处理的机制,占用系统资源会比较少

匹配模式

sed -n '1,4 p' file.txt
sed 参数 范围 操作 文件

-f 指定sed脚本

1、参数:
-n 取消默认输出,默认会输出全部
-e 多点编辑 可执行多个子命令,注意,每个要执行的命令前都需要添加  -e
-i 直接修改文件内容

2、范围选择:
按行

5 选择第5行
2,5 第2行到第5行,共4行
1~2 奇数行
2~2 偶数行
2,+3 选择第2行及接下来的3行,共4行
2,$ 第2行到结尾
按正则匹配
/sys/,+3 选择首次出现sys的行,以及后面的三行
/^sys/,/mem/ 选择以sys开头的行和出现mem字样行之间的数据,含两头

应用
sed -n '/2019-07-31.19:08:29/','/2019-07-31.19:08:30/p'  xxx.log|grep "xxxx" |wc -l
# 获取某一秒内的日志,并做过滤和统计

反向引用 &\1

3、操作参数:
p 对匹配内容进行打印
d 对匹配内容进行删除 此时需要去掉-n参数可显示删除后结果
w 将匹配内容写入到其他地方,后接写入文件的路径及文件名
# sed -n '2,5 w output.txt' file.txt
a 行后增加,after
i  行前增加,insert
c 替换匹配行,change

应用
sed -i '/mem/a 444' file.txt
# 在匹配mem的行后增加一行,内容为444前面无论有多少个空格,都会忽略

范围和操作之间空格可有可无

应用
sed -e 's/#.*//' -e '/^$/d' file.txt
# 删除所有#开头的行和空行

替换模式

# 找到sys开头的行,将所有的a替换为b
sed '/^sys/s/a/b/g' file.txt

反向引用 & 或 \1

# 将a或b或c替换为<a>或<b>或<c>
sed 's/[a,b,c]/<&>/g' file.txt
其中&代表原始数据,反向引用

sed 's/.*/"&"/' file.txt
将每一行都用""包围起来

flag参数:
g 默认只匹配第一次出现的内容,g代表全部替换
p 当使用了-n参数,p将仅输出匹配行内容
w 输出到文件
i 忽略大小写
e 将输出的每一行,执行一个命令,不建议使用,可使用xargs配合完成该功能

应用
flag参数可组合使用
sed -n 's/a/b/gipw output.txt' file.txt
sed 's/^/ls -la/e' file.txt

可以使用|^@!四个字符来替换\

正则表达式:
^ 行首
$ 行尾
.  单个字符
* 零个或多个
+ 1个或多个
零个或1个
{m,n} 前面的匹配重复m到n次
\ 转义字符
[0-9] 匹配括号中的任意一个字符
| , 或者
\b 匹配一个单词 如\blucky\b 只匹配单词lucky

参数:
i 操作在原文件执行
将原文件做个备份
sed -i.bak 's/a/b/' file.txt 会生成file.txt.bak文件
sed -i.old 's/a/b/' file.txt 会生成file.txt.old文件

应用
# 统计文件中每个单词出现的次数 (将空格替换为换行符)
sed 's/ /\n/g' file.txt|sort|uniq -c

# 查找目录中的py文件,删掉所有行级注释
find ./ -name "*.py" |xargs sed -i.bak '/^[ ]*#/d'

# 查看第5-7行和10-13行
sed -n -e '5,7p' -e '10,13p' file.txt

 

转载请注明:轻风博客 » sed命令的一些总结

喜欢 (0)or分享 (0)