Awk编程模型及元字符集
来源:互联网 发布:怎么选基金 知乎 编辑:程序博客网 时间:2024/05/19 20:47
Awk编程模型及元字符集
一、awk编程模型
awk由第二阶段的主输入循环维持,主输入循环反复执行,直到终止条件被触发。主输入循环自动依次读取输入文件行,以供处理,而处理的动作由程序员添加。awk已经搭建好了主输入循环的框架,我们的代码直接被嵌入到主输入循环中执行。与C语言不同,这里不用写main函数框架,我们的代码直接就是main函数中的语句。
awk的两个特殊字段:BEGIN,主输入循环之前(未读取输入文件行之前执行);END字段,反之。
二、awk调用方法
awk调用方法有三种:
shell 命令行调用: awk [-F 域分割符] 'awk程序段'输入文件
将awk命令插入相应脚本文件,然后awk命令调用:
awk -f awk脚本文件 输入文件 (-f表示调用awk脚本文件)
将awk命令插入相应脚本文件,设置脚本文件可执行,然后直接执行该脚本文件:
./awk脚本文件 输入文件
awk 脚本文件以sha-bang(#!)符号开头,其后加上awk路径(如/usr/bin/awk)。
在我的ubuntu系统中,ls-l /usr/bin > /home/ly/haha ,将输出结果定向到haha文件,可以看到
lrwxrwxrwx 1 root root 21Oct 22 00:25 awk -> /etc/alternatives/awk
(这是一个符号链接)
三、awk模式匹配
任何awk都由模式(pattern)和动作(action)组成。
模式:测试输入行是否需要执行动作的规则,决定动作何时触发。
动作:执行对输入行的处理
awk 的模式匹配经常用到正在表达式,下文先对正则表达式做简要介绍。
正则表达式的目的在于完成数据过滤,留下匹配的数据,去除不匹配的数据。
正则表达式是由一串字符和元字符构成的字符串,简称RE(RegularExpression)。
正则表达式的基本元素包括普通字符和元字符:普通字符,没有隐含意义,字面理解;元字符,shell赋予了他们超越字面的意义。下面是基本正则表达式中元字符集合及其意义(POSIX标准将正则表达式分做基本正则表达式和扩展正则表达式,大部分应用使用基本正则表达式)。
基本正则表达式元字符集合及其意义
符合
意义
*
0个或多个在*字符之前的那个普通字符
.
匹配任意字符
^
匹配行首或后面字符的非
$
匹配行尾
[ ]
匹配字符集合
\
转义符,屏蔽一个元字符的特殊意义
\<\>
精确匹配符
\{n\}
匹配前面字符出现n次
\{n,\}
匹配前面字符至少出现n次
\{n,m\}
匹配前面字符出现n~m次
正则表达式匹配举例:
hel*o 可匹配字符 helo hello helllo
hel.o 可匹配字符 helxo hel9o hel o ( . 可以匹配一个空格 )
^hello匹配以hello开头的行
hello$ 匹配以hello结尾的行,$放在匹配符号之后,用法和功能与^相反。
^$又匹配行首,又匹配行尾,中间没有字符,表示空行
^.$匹配只有一个字符的空行
[123456]匹配其中任一个数字。
[1-6]匹配1-6其中任一个数字。
[a-z]匹配a-z其中任一个字母。
[^1-6]匹配不在1-6中的任一个数字。^放在[]中表示取反。
[a-zA-Z]匹配所以英文单词
\. .不在表示任意一个字符,而只是一个普通字符。
\<the\> 精确匹配the这个单词,一点都不能差。
JP\{3\}L 匹配值为JPPPL
JP\{3,\}L P至少出现3次
[a-z]\{5\} 精确匹配5个小写字母,如hello,house
扩展正则表达式元字符集合及其意义
符号
意义
?
匹配0个或1个在其之前的那个普通字符
+
匹配1个或多个在其之前的那个普通字符
()
表示一个字符集合或用在expr中
|
表示或,匹配一组可选的字符
扩展正则表达式匹配举例:
jo?b 匹配job或joob
de+x 匹配deex deeeeeeex,但不匹配dex
re(a|e|o)d匹配readreed reod
RE1|RE2|RE3 表示多个正则表达式的或关系
awk 支持?和+两个两个扩展元字符。
下面是一个shell命令行调用awk的例子
awk '/^$/ {print “this is a blankline .”}' input
一直输入回车,会打印this is a blank line,^$匹配一个空行。
awk 命令存在于单引号中间,由两部分组成,^$部分是模式,花括号部分是动作,以/ 号分割,input是输入的文件名称。
本文完全参照 <linux shell 编程从初学到精通> 华清远见嵌入式培训中心 伍之昂等编著
- Awk编程模型及元字符集
- ruby元编程——对象模型
- 正则表达式元字符集
- linux 基本元字符集
- awk之支持posix字符集
- awk编程
- awk编程
- awk 编程
- awk编程
- awk编程
- awk 编程
- AWK编程
- awk编程
- awk 编程
- awk编程
- 编程模型及SparkShell实战
- Ruby元编程-学习笔记(一)-对象模型
- Ruby元编程-学习笔记(一)-对象模型
- ArcEngine动态追踪
- 开发phonegap应用问题汇总
- 倒计时效果demo
- Android内存分析和调优(上)
- Android SharedPreferences本地缓存
- Awk编程模型及元字符集
- 第十三周 项目4.1 数组的排序
- ContentProvider 一个error问题
- Head First HTML与CSS 读书笔记(一)
- tar.xz文件一步解压
- HTTPS WinHttpSendRequest的时候报错
- Android内存分析和调优(中)
- c++ 重载 new delete
- Java中Heap与Stack的区别