一、grep
grep pattern file
grep -i pattern file 忽略⼤⼩写
grep -v pattern file 不显⽰匹配的⾏
grep -o pattern file 把每个匹配的内容⽤独⽴的⾏显⽰
grep -E pattern file 使⽤扩展正则表达式
grep -A -B -C pattern file 打印命中数据的上下⽂
grep pattern -r dir/ 递归搜索
二、BRE基本正则表达式
^ 开头 $结尾
[a-z] [0-9] 区间,如果开头带有^表⽰不能匹配区间内的元素
* 0个或多个
. 表⽰任意字符
三、ERE扩展正则表达式
基本正则表达式(BRE)基础上的扩展
? ⾮贪婪匹配
+ ⼀个或者多个
() 分组
{} 范围约束
| 匹配多个表达式的任何⼀个
四、awk
1、介绍
Awk是linux下的⼀个命令,同时也是⼀种语⾔解析引擎
Awk具备完整的编程特性。⽐如执⾏命令,⽹络请求等
精通awk,是⼀个linux⼯作者的必备技能
2、awk pattern语法( awk 'pattern{action}')
awk理论上可以代替grep
awk 'pattern{action}'
awk 'BEGIN{}END{}' 开始和结束
awk '/Running/' 正则匹配
awk '/aa/,/bb/' 区间选择
awk '$2~/xxx/' 字段匹配
awk 'NR==2' 取第⼆⾏
awk 'NR>1' 去掉第⼀⾏
3、awk内置变量
FS 字段分隔符
OFS 输出数据的字段分隔符
RS 记录分隔符
ORS 输出字段的⾏分隔符
NF 字段数
NR 记录数
4、awk的字段数据处理
-F 参数指定字段分隔符
BEGIN{FS="_"} 也可以表⽰分隔符
$0代表当前的记录
$1代表第⼀个字段
$N 代表第N个字段
$NF 代表最后⼀个字段
$(NF-1) 代表倒数第⼆个字段
5、awk字段分割
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' \
| awk -F/ '{print $1,$2,$3,$4}'
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' \
| awk 'BEGIN{FS="/"}{print $1,$2,$3,$4}'
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' \
| awk 'BEGIN{FS="/|-"}{print $1,$2,$3,$4}'
修改OFS和ORS让$0重新计算
echo $PATH | awk 'BEGIN{FS=":";OFS=" | "}{$1=$1;print $0}'
echo $PATH | awk 'BEGIN{RS=":";ORS="^"}{print $0}'
6、awk⾏处理
把单⾏分拆为多⾏
echo $PATH | awk 'BEGIN{RS=":"}{print $0}'
echo $PATH | awk 'BEGIN{RS=":"}{print NR,$0}'
echo $PATH | awk 'BEGIN{RS=":"}END{print NR}'
多⾏组合为单⾏
echo $PATH | awk 'BEGIN{RS=":"}{print $0}' |
awk 'BEGIN{ORS=":"}{print $0}'
7、数据计算
echo '1,10
2,20
3,30' | awk 'BEGIN{a=0;FS=","}{a+=$2}END{print a/NR}'
8、awk的词典结构
五、sed
sed [addr]X[options]
-e 表达式
sed -n '2p' 打印第⼆⾏
sed 's#hello#world#' 修改
-i 直接修改源⽂件
-E 扩展表达式
--debug 调试