您的位置:首页 > 运维架构 > Shell

关于shell中的正则表达式和awk的使用

2015-08-28 21:58 417 查看
今天有幸得方叔开的小灶,特将课堂笔记整理如下,以备后续使用。

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
b,3
a,1
c,4
b,4
d,1
c,1
处理代码如下:a.awk

BEGIN{
FS=",";
}
{
a[$1] += $2;
}
END{
for (i in a)
{
printf("key=%s, value=%d\n", i, a[i]);
}
}
执行命令:awk -f a.awk a.txt后,得到

key=a, value=3
key=b, value=7
key=c, value=5
key=d, value=1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: