什么是正则表达式?
正则表达式可以定义为代表若干个字符序列的字符串。它最重要的功能之一就是它允许你过滤一条命令或一个文件的输出、编辑文本或配置文件的一部分等等。正则表达式的特点
正则表达式由以下内容组合而成:普通字符 ,例如空格、下划线、A-Z、a-z、0-9。
可以扩展为普通字符的 元字符 ,它们包括:
(.)它匹配除了换行符外的任何单个字符。
(*)它匹配零个或多个在其之前紧挨着的字符。
[ character(s) ]它匹配任何由其中的字符/字符集指定的字符,你可以使用连字符(-)代表字符区间,例如 [a-f]、[1-5]等。
^它匹配文件中一行的开头。
$它匹配文件中一行的结尾。
\这是一个转义字符。
你必须使用类似 awk 这样的文本过滤工具来过滤文本。你还可以把 awk 自身当作一个编程语言。但由于这个指南的适用范围是关于使用 awk 的,我会按照一个简单的命令行过滤工具来介绍它。
awk 的一般语法如下:
# awk 'script' filename
此处
'script'是一个由 awk 可以理解并应用于 filename 的命令集合。
它通过读取文件中的给定行,复制该行的内容并在该行上执行脚本的方式工作。这个过程会在该文件中的所有行上重复。
该脚本
'script'中内容的格式是
'/pattern/ action',其中
pattern是一个正则表达式,而
action是当 awk 在该行中找到此模式时应当执行的动作。
如何在 Linux 中使用 awk 过滤工具
在下面的例子中,我们将聚焦于之前讨论过的元字符。一个使用 awk 的简单示例:
下面的例子打印文件 /etc/hosts 中的所有行,因为没有指定任何的模式。# awk '//{print}' /etc/hosts
awk 打印文件中的所有行
结合模式使用 awk
在下面的示例中,指定了模式localhost,因此 awk 将匹配文件
/etc/hosts中有
localhost的那些行。
# awk '/localhost/{print}' /etc/hosts
awk 打印文件中匹配模式的行
在 awk 模式中使用通配符 (.)
在下面的例子中,符号(.)将匹配包含 loc、localhost、localnet 的字符串。
这里的正则表达式的意思是匹配 l一个字符c 。
# awk '/l.c/{print}' /etc/hosts
使用 awk 打印文件中匹配模式的字符串
在 awk 模式中使用字符 (*)
在下面的例子中,将匹配包含 localhost、localnet、lines, capable 的字符串。# awk '/l*c/{print}' /etc/localhost
使用 awk 匹配文件中的字符串
你可能也意识到
(*)将会尝试匹配它可能检测到的最长的匹配。
让我们看一看可以证明这一点的例子,正则表达式
t*t的意思是在下面的行中匹配以
t开始和
t结束的字符串:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint.
当你使用模式
/t*t/时,会得到如下可能的结果:
this is t this is tecmint this is tecmint, where you get t this is tecmint, where you get the best good t this is tecmint, where you get the best good tutorials, how t this is tecmint, where you get the best good tutorials, how tos, guides, t this is tecmint, where you get the best good tutorials, how tos, guides, tecmint
在
/t*t/中的通配符
(*)将使得 awk 选择匹配的最后一项:
this is tecmint, where you get the best good tutorials, how to's, guides, tecmint
结合集合 [ character(s) ] 使用 awk
以集合 [al1] 为例,awk 将匹配文件 /etc/hosts 中所有包含字符 a 或 l 或 1 的字符串。# awk '/[al1]/{print}' /etc/hosts
使用 awk 打印文件中匹配的字符
下一个例子匹配以
K或
k开始头,后面跟着一个
T的字符串:
# awk '/[Kk]T/{print}' /etc/hosts
使用 awk 打印文件中匹配的字符
以范围的方式指定字符
awk 所能理解的字符:[0-9]代表一个单独的数字
[a-z]代表一个单独的小写字母
[A-Z]代表一个单独的大写字母
[a-zA-Z]代表一个单独的字母
[a-zA-Z 0-9]代表一个单独的字母或数字
让我们看看下面的例子:
# awk '/[0-9]/{print}' /etc/hosts
使用 awk 打印文件中匹配的数字
在上面的例子中,文件 /etc/hosts 中的所有行都至少包含一个单独的数字 [0-9]。
结合元字符 (^) 使用 awk
在下面的例子中,它匹配所有以给定模式开头的行:# awk '/^fe/{print}' /etc/hosts # awk '/^ff/{print}' /etc/hosts
使用 awk 打印与模式匹配的行
结合元字符 ($) 使用 awk
它将匹配所有以给定模式结尾的行:# awk '/ab$/{print}' /etc/hosts # awk '/ost$/{print}' /etc/hosts # awk '/rs$/{print}' /etc/hosts
使用 awk 打印与模式匹配的字符串
结合转义字符 (\) 使用 awk
它允许你将该转义字符后面的字符作为文字,即理解为其字面的意思。在下面的例子中,第一个命令打印出文件中的所有行,第二个命令中我想匹配具有 $25.00 的一行,但我并未使用转义字符,因而没有打印出任何内容。
第三个命令是正确的,因为一个这里使用了一个转义字符以转义 $,以将其识别为 '$'(而非元字符)。
# awk '//{print}' deals.txt # awk '/$25.00/{print}' deals.txt # awk '/\$25.00/{print}' deals.txt
结合转义字符使用 awk
总结
以上内容并不是 awk 命令用做过滤工具的全部,上述的示例均是 awk 的基础操作。在下面的章节中,我将进一步介绍如何使用 awk 的高级功能。感谢您的阅读,请在评论区贴出您的评论。作者: Aaron Kili 译者: wwy-hust 校对: wxy
参考来源:
awk 系列:如何使用 awk 和正则表达式过滤文本或文件中的字符串
http://www.lai18/content/24604054.html
延伸阅读
《Linux常用命令手册》系列技术文章整理收藏
Linux常用命令手册整理收藏常用的Linux命令,帮助自己,也帮助大家更好地掌握这些常用Linux命令,给Linux操作带来便利,更好地使用Linux系统
1awk 系列:如何使用 awk 和正则表达式过滤文本或文件中的字符串
2Linux常用命令-awk 手册
3Linux 新手必知必会的 10 条 Linux 基本命令
4Linux/UNIX 定时任务 cron 详解
5在 Linux 下使用 scp 命令
6Linux中文件的压缩与解压缩命令操作示例集锦
7Linux中文本处理命令sed的使用示例分享
8Linux中使用grep命令搜索文件名及文件内容的方法
9全面解析Linux的grep命令中正则表达式的用法
10grep 命令系列:如何在 UNIX 中根据文件内容查找文件
11grep 命令系列:从文件中搜索并显示文件名
12在Linux命令终端中查看和编辑曾执行过的命令
13讲解Linux中校验文件的MD5码与SHA1码的命令使用
14grep 命令系列:用 grep 命令统计匹配字符串的行数
15grep 命令系列:使用 grep 命令来搜索多个单词
16grep 命令系列:grep 中的正则表达式
17详解Linux系统中查询文档的man和info命令
18Linux系统中安装使用Bzip2来压缩文件的方法讲解
19Linux下用gzip和unzip命令来压缩和解压文件的用法
20Linux中的文件压缩命令tar与rar的用法总结
21Linux中控制文件权限修改的chgrp和umask命令用法
22举例讲解Linux下grep命令的精彩使用技巧
23详解Linux系统中su和sudo命令的用法
24Linux 系统下查看硬件信息命令大全
25grep 命令系列:如何在 Linux/UNIX 中使用 grep 命令
26在Linux系统中使用who和whoami命令获取用户信息
27简单掌握Linux中用于更改访问控制的chacl命令
28详解Linux系统中管理文件权限的chown和chmod命令
29Linux系统中修改与查看文件属性的基本方法
30Linux中的mail邮件命令的各种参数使用详解
31详解Linux中的用户密码管理命令passwd和change
32Linux系统中dig命令用法完全罗列
33Linux中DNS服务器地址查询命令nslookup使用教程
34详解Linux中用于查询用户信息的finger和chfn命令
35Linux系统中SSH命令的使用教程
36详解Linux下常用远程登陆命令telnet和rlogin的用法
37Linux系统中nc命令的基本用法掌握
38Linux中获取网络信息的netstat命令的常用参数和用法
39linux命令之top该怎么用?top命令详解
40linux下用shell、sed批量替换多个文件中的字符串
41linux中scp命令和scp命令用法大全
42Linux 经常使用的命令
43新手应知应会的Linux命令
44积累linux常用的命令
45详解Linux系统中md5sum命令的用法
46Linux中,创建聊天服务器、移除冗余软件包的实用命令
47Linux中7个用来浏览网页和下载文件的命令
48在Linux系统中使用tar命令压缩和解压文件的教程
4912个linux进程管理命令介绍
50Linux Ctrl+Z的使用方法
515个经典有趣的 Linux 命令行技巧
52Centos下查看网卡的实时流量命令
53linux、unix下快速清空文件的方法
5411个让你吃惊的 Linux 终端命令
5514 个 Linux grep 命令的例子
56Linux 中 sort 命令的14个有用的范例(一)
57Apache、PHP 隐藏版本信息
58解决ssh登录后闲置时间过长而断开连接
59centos 用户相关的命令
60grep如何忽略过滤.svn目录以及如何忽略多个目录
61centos 用户相关的命令
62解决ssh登录后闲置时间过长而断开连接
63Shell脚本统计文件行数的8种方法
64Linux xargs命令
65Linux文本搜索工具grep使用详解
66linux系统用什么命令查看端口的占用情况?
67Linux如何提高大文件的拷贝效率以节约时间
68Linux查看系统日志的一些常用命令总结
69Ubuntu文本编辑器vi使用方向键出错的解决方法
704个最流行的Linux平台开源代码编辑器
7120条Linux命令面试问答
72在 Linux 下你所不知道的 df 命令的那些功能
73Linux ps 命令实战
74Linux系统中下载文件的wget命令操作实例
75Linux正则表达式使用指南
76CentOS 6.5系统设置固定IP的方法
77Linux如何使用awk文本处理工具进行数组排序
78Linux tar命令Tar Time Stamp in the Future问题解决方法
79CentOS如何将DVD设置为默认yum源以便DVD中软件的下载安装
80Linux下查看内存使用情况的方法总结
81Linux如何使用locate命令查找数据查找指定文件
82Linux find命令中-path -prune参数作用详细介绍
83Linux curl使用简单介绍
更多推荐
如何使用 awk 和正则表达式过滤文本或文件中的字符串
发布评论