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

时间:2022-12-21 18:48:58

今天有幸得方叔开的小灶,特将课堂笔记整理如下,以备后续使用。

        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

                              



                             


  



相关文章