sed和awk的区别:
1. awk主要处理的是列
sed处理的行
2. awk处理固定长度的列用比较好
不固定长度的列用sed好处理
一. sed语法&选项
1. 语法
①基本语法,类似cat
② sed 选项 '自身脚本语法' 操作
tips:选项可以没有,但是自身脚本语法操作必须要有。
单引号双引号无所谓,awk要注意单双引号。
2. 选项
sed选项分两类
① 命令的选项
-e | 多点编辑 例: sed -n -e '/^r/p' -e '/^b/p' /etc/passwd |
-n | 关闭自动打印(sed会自动打印,不关用脚本语法中的 ‘p’ 时会打印两次) |
-r | 使用扩展正则 |
-i | 实际修改文件的内容 |
-i.bak | 实际修改前先备份源文件,会产生一个源文件.bak的文件 |
② sed自身脚本语法中的命令选项
脚本语法格式:‘地址+命令’
Ⅰ. 不写地址就是全文
Ⅱ .单地址
#:指定的行
$:最后一行
Ⅲ .地址范围:
#,# #从#行到第#行,3,6 从第3行到第6行
#,+# #从#行到+#行,3,+4 表示从3行到第7行
/pat1/,/pat2/ 第一个正则表达式和第二个正则表达式之间的行
#,/pat/ 从#号行为开始找到 pat为止
/pat/,# 找到#个/pat/为止
Ⅳ .步进:~
1~2 奇数行
2~2 偶数行
Ⅴ .命令选项
p | 打印 | 查看文件第三行:sed -n ‘3p’ 文件名 ,前三行是 '1,3p' |
q | 提前退出 | 打印到第三行就退出:sed ‘3q’ 文件名 |
d | 删除 | 查看时删掉第三行:sed ‘3d’ 文件名 |
a | 在某一行的后一行插入内容 | 在第三行后加入hh sed 3ahh (不打开文件的情况下修改文件内容,但没保存到文件里) |
i | 在某一行的前一行插入内容 | 同上,把a换成 i |
c | 把某一行替换成掉 | 同上,把a换成 c |
r | 插入文本内容 | 在第二行后插入文本内容:sed '2r 要插入的文本名' |
= | 显示行号 | 一般不用 |
3. 用法举例
① 例:查找几点几分到几点几分之间的日志(/pat1/,/pat2/)
sed -n '/几点几分/,/几点几分/p' 日志文件
② 例:修改文件内容
sed -i '2a \ hehe\nhaha' 文件名
\表示空格 \n 表示换行
二. 搜索替代
脚本命令里面可以用s///来搜索替代,类似vim的s///
1. 普通用法
(地址)s/旧字符/新字符/修饰符,
tips:旧字符可以用表达式,新字符不可以
修饰符:
修饰符 | 效果 |
g | 行内全局替换 |
p | 显示替换成功的行 |
w | /PATH/FILE 将替换成功的行保存至文件中 |
I,i | 忽略大小写 |
例:把/etc/passwd里面的root后面加上er
2. 分组后项引用
tips:只有扩展正则式才支持分组
举例讲解
① 基本用法
② 高阶用法 筛选(.*)
常用公式:sed -nr 's/旧字符/\1/p' (1:要选择留下的组。p:打印出来)
例:筛选出网卡信息中的IP地址