今天有幸得方叔开的小灶,特将课堂笔记整理如下,以备后续使用。
1、关于正则表达式
- egrep和grep -e都可接正则表达式,若使用grep接正则表达式,则表达式中的"["和“]”需要转义
- 匹配次数
+ 表示匹配至少一次
* 表示匹配0次或多次
{m,n} 表示匹配m到n次
{m} 表示只匹配m次? 表示匹配0次或一次
- 举例将a.txt中的一行“123abc456”替换为“abcd”
sed -i 's/^[0-9]\{3\}abc[0-9]\{3\}/abcd/g' a.txt
表达式中的开头的s表示替换,结尾的g表示全局替换,即替换文件中所有匹配行,表达式语法为‘s/匹配的正则表达式/替换后的字符串/g’
2、awk与gawk
- 区别
gawk可用的函数更多,而awk处理的列不能超过200列
- 语法
BEGIN {
......#可选部分,在处理文件前执行的内容,如全局变量的声明等
}
{
......#必选部分,从文件的第一行到最后一行,每行都作为该部分的输入参数
}
END {
......#可选部分,关闭文件前执行
}
符号 | 含义 | 符号 | 含义 |
FS="," | 以逗号分隔 | IFS | 指定输入分隔符 |
OFS | 指定输出分隔符 | NF | 当前行分割后的列数 |
NR | 当前行数 | $0 | 当前整行 |
split() | 拆分已分割后的列的函数 | continue | 继续执行循环,用于for或while中 |
next | 不再处理当前行,改为处理下一行 | exit | 退出当前脚本 |
- awk用法举例
处理a.txt中的内容,要求汇总统计各字符后的数字的和,a.txt的内容如下:
a,2处理代码如下:a.awk
b,3
a,1
c,4
b,4
d,1
c,1
BEGIN{执行命令:awk -f a.awk a.txt后,得到
FS=",";
}
{
a[$1] += $2;
}
END{
for (i in a)
{
printf("key=%s, value=%d\n", i, a[i]);
}
}
key=a, value=3
key=b, value=7
key=c, value=5
key=d, value=1