关于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列
语法
awk用法举例
处理a.txt中的内容,要求汇总统计各字符后的数字的和,a.txt的内容如下:
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 | 退出当前脚本 |
处理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
相关文章推荐
- SSH隧道管理内部服务(putty,ssh secure shell)for win
- adb 连不上设备的种种情况
- bash: ifconfig: command not found 解决办法
- Shell scripts to Create a local dir base on the time.
- 小议:如何用PowerShell创建State Services?
- HBase shell 无法使用 Backspace 键-解决方案
- linux shell if 参数
- linuxSHELL学习之获取用户输入
- xshell远程qemu-kvm虚拟机安装
- Linux shell获取时间和时间间隔(ms级别)
- 《Linux命令、编辑器与Shell编程》读书笔记3-linux命令中的特殊字符和正则表达式
- xshell5连接centos6.7时提示服务器拒绝了密码的解决办法
- 收集的48个Shell脚本小技巧
- jenkins中配置powershell生成svn日志(word)
- linux shell——命令之乐
- linux shell 快捷键
- Linux学习笔记-------shell基础
- shell练习一
- shell练习二
- shell练习三