当我们在Unix / Linux中运行某些命令以从字符串或文件中读取或编辑文本时,我们大多数时候会尝试将输出过滤到给定的感兴趣部分。 这是使用正则表达式派上用场的地方。
另请阅读: 10有用的Linux链接运营商实际的例子
什么是正则表达式?
正则表达式可以定义为表示几个字符序列的字符串。 正则表达式最重要的一点是它们允许你过滤命令或文件的输出,编辑文本或配置文件的一部分,等等。
正则表达式的特征
正则表达式由:
- 普通的字符 ,如空格,下划线(_),包括AZ,az,0-9。
- 一个扩展到普通字符元字符 ,它们包括:
-
(.)
它除换行符之外的任何单个字符相匹配。 -
(*)
它匹配它前面的直接字符的零个或多个存在物。 -
[ character(s) ]
它匹配字符(县)指定的任何一个字符,人们还可以使用连字符(-)
来表示一个字符范围如[af]
[1-5]
等等。 -
^
它在文件中的行的开头相匹配。 -
$
线的一个文件中的末尾匹配。 -
\
是转义字符。
-
为了过滤文本,人们使用文本过滤工具,如AWK。 你能想到的awk作为自己的编程语言。 但对于本指南用awk的范围,我们应包括它作为一个简单的命令行过滤工具。
awk的一般语法是:
# awk 'script' filename
其中, 'script'
是一组由AWK的理解和执行是对文件,文件名的命令。
它通过读取文件中的给定行,制作行的副本,然后在该行上执行脚本。 这将在文件中的所有行上重复。
在'script'
的格式为'/pattern/ action'
其中pattern是一个正则表达式和动作是当它发现在一条线上给定的模式awk将做什么。
如何在Linux中使用Awk过滤工具
在下面的例子中,我们将关注我们上面讨论的awk特性下的元字符。
使用awk的一个简单示例:
下面的例子打印在文件/ etc / hosts中所有的线,因为不给定模式。
# awk '//{print}'/etc/hosts
Awk打印文件中的所有行
使用模式的Awk:
我下面的例子,一个格局localhost
已给出,这样awk将在本地主机有匹配行/etc/hosts
的文件。
# awk '/localhost/{print}' /etc/hosts
Awk打印给定文件中的匹配行
在模式中使用带(。)通配符的Awk
在(.)
将匹配包含在下面的例子禄 , 本地主机 ,localnet的字符串。
也就是说* L some_single_character C *。
# awk '/l.c/{print}' /etc/hosts
使用Awk打印文件中的匹配字符串
在模式中使用带(*)字符的Awk
它将匹配包含本地主机 ,localnet的 , 线条 , 能 ,如在下面的例子字符串:
# awk '/l*c/{print}' /etc/localhost
使用Awk匹配文件中的字符串
你也会意识到, (*)
尝试一个可能让你最长匹配它可以检测。
我们先来看一个演示这种情况下,采取正则表达式t*t
,这意味着匹配字符串以字母开始t
和结束t
下面的一行:
this is youcl, where you get the best good tutorials, how to's, guides, youcl.
当您使用的模式,你将获得以下可能性/t*t/
:
this is t this is youcl this is youcl, where you get t this is youcl, where you get the best good t this is youcl, where you get the best good tutorials, how t this is youcl, where you get the best good tutorials, how tos, guides, t this is youcl, where you get the best good tutorials, how tos, guides, youcl
和(*)
的/t*t/
通配符允许awk来选择最后一个选项:
this is youcl, where you get the best good tutorials, how to's, guides, youcl
使用Awk和set [character]
就拿集[al1]
这里awk将匹配包含字符的所有字符串a
或l
或1
在文件/ etc / hosts中的一行。
# awk '/[al1]/{print}' /etc/hosts
使用Awk在文件中打印匹配字符
下一个例子匹配字符串开头要么K
或k
其次是T
:
# awk '/[Kk]T/{print}' /etc/hosts
使用Awk打印文件中的匹配字符串
指定范围中的字符
使用awk了解字符:
-
[0-9]
是指单号 -
[az]
表示匹配一个小写字母 -
[AZ]
表示匹配单个大写字母 -
[a-zA-Z]
表示匹配一个字母 -
[a-zA-Z 0-9]
表示匹配单个字母或数字
让我们看看下面的例子:
# awk '/[0-9]/{print}' /etc/hosts
使用Awk打印文件中的匹配数字
所有从文件/ etc /主机线路中至少包含一个单一号码[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的复杂特性。 感谢阅读,任何补充或澄清,在评论部分发表评论。