1. 云栖社区>
  2. PHP教程>
  3. 正文

如何使用 awk 和正则表达式过滤文本或文件中的字符串

作者:用户 来源:互联网 时间:2017-12-01 10:29:11

字符串文件正则awk文本表达式使用过滤如何

如何使用 awk 和正则表达式过滤文本或文件中的字符串 - 摘要: 本文讲的是如何使用 awk 和正则表达式过滤文本或文件中的字符串, 当我们在 Unix/Linux 下使用特定的命令从字符串或文件中读取或编辑文本时,我们经常需要过滤输出以得到感兴趣的部分。这时正则表达式就派上用场了。 什么是正则表达式? 正则表达式可以定义为代表若干个字符序列的字符串。它最重要的功能之

当我们在 Unix/Linux 下使用特定的命令从字符串或文件中读取或编辑文本时,我们经常需要过滤输出以得到感兴趣的部分。这时正则表达式就派上用场了。


什么是正则表达式?

正则表达式可以定义为代表若干个字符序列的字符串。它最重要的功能之一就是它允许你过滤一条命令或一个文件的输出、编辑文本或配置文件的一部分等等。


正则表达式的特点

正则表达式由以下内容组合而成:普通字符,例如空格、下划线、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 打印文件中的所有行


结合模式使用 awk

在下面的示例中,指定了模式


localhost

,因此 awk 将匹配文件


/etc/hosts

中有


localhost

的那些行。


# awk '/localhost/{print}' /etc/hosts

如何使用 awk 和正则表达式过滤文本或文件中的字符串awk 打印文件中匹配模式的行


在 awk 模式中使用通配符 (.)

在下面的例子中,符号


(.)

将匹配包含 loc、localhost、localnet 的字符串。这里的正则表达式的意思是匹配l一个字符c。


# awk '/l.c/{print}' /etc/hosts

如何使用 awk 和正则表达式过滤文本或文件中的字符串使用 awk 打印文件中匹配模式的字符串


在 awk 模式中使用字符 (*)

在下面的例子中,将匹配包含 localhost、localnet、lines, capable 的字符串。


# awk '/l*c/{print}' /etc/localhost

如何使用 awk 和正则表达式过滤文本或文件中的字符串使用 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 和正则表达式过滤文本或文件中的字符串使用 awk 打印文件中匹配的字符下一个例子匹配以


K


k

开始头,后面跟着一个


T

的字符串:


# awk '/[Kk]T/{print}' /etc/hosts

如何使用 awk 和正则表达式过滤文本或文件中的字符串使用 awk 打印文件中匹配的字符


以范围的方式指定字符

awk 所能理解的字符:


[0-9]

代表一个单独的数字


[a-z]

代表一个单独的小写字母


[A-Z]

代表一个单独的大写字母


[a-zA-Z]

代表一个单独的字母


[a-zA-Z 0-9]

代表一个单独的字母或数字让我们看看下面的例子:


# awk '/[0-9]/{print}' /etc/hosts

如何使用 awk 和正则表达式过滤文本或文件中的字符串使用 awk 打印文件中匹配的数字在上面的例子中,文件 /etc/hosts 中的所有行都至少包含一个单独的数字 [0-9]。


结合元字符 (^) 使用 awk

在下面的例子中,它匹配所有以给定模式开头的行:


# awk '/^fe/{print}' /etc/hosts
# awk '/^ff/{print}' /etc/hosts

如何使用 awk 和正则表达式过滤文本或文件中的字符串使用 awk 打印与模式匹配的行


结合元字符 ($) 使用 awk

它将匹配所有以给定模式结尾的行:


# awk '/ab$/{print}' /etc/hosts
# awk '/ost$/{print}' /etc/hosts
# awk '/rs$/{print}' /etc/hosts

如何使用 awk 和正则表达式过滤文本或文件中的字符串使用 awk 打印与模式匹配的字符串


结合转义字符 (/) 使用 awk

它允许你将该转义字符后面的字符作为文字,即理解为其字面的意思。在下面的例子中,第一个命令打印出文件中的所有行,第二个命令中我想匹配具有 $25.00 的一行,但我并未使用转义字符,因而没有打印出任何内容。第三个命令是正确的,因为一个这里使用了一个转义字符以转义 $,以将其识别为 '$'(而非元字符)。


# awk '//{print}' deals.txt
# awk '/$25.00/{print}' deals.txt
# awk '//$25.00/{print}' deals.txt

如何使用 awk 和正则表达式过滤文本或文件中的字符串结合转义字符使用 awk


总结

以上内容并不是 awk 命令用做过滤工具的全部,上述的示例均是 awk 的基础操作。在下面的章节中,我将进一步介绍如何使用 awk 的高级功能。感谢您的阅读,请在评论区贴出您的评论。作者:Aaron Kili译者:wwy-hust校对:wxy


参考来源: awk 系列:如何使用 awk 和正则表达式过滤文本或文件中的字符串 http://www.lai18.com/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 , 文本 , 表达式 , 使用 , 过滤 如何 ,以便于您获取更多的相关知识。