Linux三剑客——sed
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux三剑客——sed相关的知识,希望对你有一定的参考价值。
1.1 sed介绍
1. sed——流编辑器(stream editor)
2. sed功能与版本:
处理文本文件,日志,配置文件
增加、删除、修改、查询
sed --version
3. 语法格式:sed [选项] [sed指令] [输入文件]
sed -i.bak 's#boy#girl#g' oldboy.txt
-i sed命令的参数
s sed命令
g 小尾巴/修饰
1.2 sed命令功能示例
1. 等号’=‘显示行号
# sed = person.txt
2. 单行-输入行号即可
# sed -n '3p' person.txt
103,Alex,COO
3. 显示多行
# sed -n '3,6p' person.txt
4. 包含oldboy的行
# sed -n '/oldboy/p' person.txt
101,oldboy,CEO
5. 显示包含oldboy到显示yy的行
# sed -n '/oldboy/,/yy/p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
6. 显示包含oldboy或yy的行
# sed -nr '/oldboy|yy/p' person.txt
7. 显示不连续的行
# sed -nr '1p;3p;4p' person.txt
8. 文件的最后一行增加两行
# sed '$a106,wuxingge,UFO\n107,lee,XO' person.txt
#a==append 追加
#i==insert 插入
# echo -e '106,wuxingge,UFO\n107,lee,XO'>>person.txt
# cat >>person.txt <<EOF
> 106,wuxingge,UFO
> 107,lee,XO
>EOF
9. 不显示空行方法 !表示取反
# sed '/^$/d' person.txt
# sed -n '/^$/!p' person.txt
# awk '!/^$/' person.txt
# grep -v '^$' person.txt
10. ‘s###’表示逐行替换符合条件的第一个对象
# sed 's#1#dou#' person.txt
dou01,oldboy,CEO
-i 表示确定修改
-i.bak 表示先备份再修改
sed中双引号内变量可以执行
11. sed命令中&符号表示前面正则匹配到的内容
# echo '123456'|sed 's#.*#<&>#g'
<123456>
# echo '123456'|sed -r 's#([0-9])#<\1>#g'
<1><2><3><4><5><6>
# echo '123456'|sed 's#.#<&>#g'
<1><2><3><4><5><6>
1.3 批量修改文件名
1. 使用sed替换
# ls *.jpg|sed -r 's#(.*)jpg#mv & \1avi#g'
mv oldboy01.jpg oldboy01.avi
mv oldboy02.jpg oldboy02.avi
# ls *.jpg|sed -r 's#(.*)jpg#mv & \1avi#g'|bash
2. 使用rename方法批量修改文件名
# rename jpg avi old*.jpg
rename from to file
替换的内容 替换成什么 替换哪些文件
1.4 使用sed命令常见的坑
1. -r与-i同时使用:
-r参数在前面:-ri 正常结果
-i参数在前面:-ir 表示先把文件备份xxr,然后再替换文件中的内容
2. -r与-n同时使用:会把源文件的内容清空,只显示符合条件内容
1.5 sed命令总结图
以上是关于Linux三剑客——sed的主要内容,如果未能解决你的问题,请参考以下文章