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

当我们在Unix / Linux中运行某些命令以从字符串或文件中读取或编辑文本时,我们大多数时候会尝试将输出过滤到给定的感兴趣部分。 这是使用正则表达式派上用场的地方。

另请阅读: 10有用的Linux链接运营商实际的例子

什么是正则表达式?

正则表达式可以定义为表示几个字符序列的字符串。 正则表达式最重要的一点是它们允许你过滤命令或文件的输出,编辑文本或配置文件的一部分,等等。

正则表达式的特征

正则表达式由:

  1. 普通的字符 ,如空格,下划线(_),包括AZ,az,0-9。
  2. 一个扩展到普通字符元字符 ,它们包括:
    1. (.)它除换行符之外的任何单个字符相匹配。
    2. (*)它匹配它前面的直接字符的零个或多个存在物。
    3. [ character(s) ]它匹配字符(县)指定的任何一个字符,人们还可以使用连字符(-)来表示一个字符范围如[af] [1-5]等等。
    4. ^它在文件中的行的开头相匹配。
    5. $线的一个文件中的末尾匹配。
    6. \是转义字符。

为了过滤文本,人们使用文本过滤工具,如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将匹配包含字符的所有字符串al1在文件/ etc / hosts中的一行。

# awk '/[al1]/{print}' /etc/hosts

使用Awk在文件中打印匹配字符

下一个例子匹配字符串开头要么Kk其次是T

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

使用Awk打印文件中的匹配字符串

指定范围中的字符

使用awk了解字符:

  1. [0-9]是指单号
  2. [az]表示匹配一个小写字母
  3. [AZ]表示匹配单个大写字母
  4. [a-zA-Z]表示匹配一个字母
  5. [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的复杂特性。 感谢阅读,任何补充或澄清,在评论部分发表评论。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏