相关文章推荐
闷骚的李子  ·  Ubuntu Apache ...·  3 月前    · 
星星上的苦咖啡  ·  在 SQL Server 中使用 JSON ...·  4 月前    · 
爱热闹的打火机  ·  2024年开封市事业单位公开招聘联考工作的公 ...·  1 年前    · 
帅呆的毛衣  ·  一日一技:Scrapy 如何正确 Post ...·  2 年前    · 
满身肌肉的熊猫  ·  联系人姓名长度超过限制,请检查后再试 | ...·  2 年前    · 
Code  ›  使用awk和正则表达式过滤文件中的文本或字符串开发者社区
正则表达式 字符 localhost awk
https://cloud.tencent.com/developer/article/2015104
帅气的洋葱
2 年前
入门笔记
0 篇文章

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

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
入门笔记
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 入门小站 > 使用awk和正则表达式过滤文件中的文本或字符串

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

作者头像
入门笔记
发布 于 2022-06-02 15:49:01
1.4K 0
发布 于 2022-06-02 15:49:01
举报

当我们在 Unix/Linux 中运行某些命令来读取或编辑字符串或文件中的文本时,我们很多时候都会查找指定特征的字符串。这可能会使用正则表达式。

什么是正则表达式?

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

正则表达式的特点

正则表达式由以下组成:

  1. Ordinary characters 例如空格、下划线 (_)、AZ、az、0-9 。
  2. Meta characters 扩展为普通字符,它们包括:
    1. (.) 它匹配除换行符之外的任何单个字符。
    2. (*) 它匹配它前面的直接字符的零个或多个存在。
    3. [character(s)] 它匹配字符中指定的任何一个字符,也可以使用连字符 (-) 表示一系列字符,例如 [a-f] 、 [1-5] 等。
    4. ^ 它匹配文件中一行的开头。
    5. $ 匹配文件中的行尾。
    6. \ 它是一个转义字符。

为了过滤文本,必须使用文本过滤工具,例如 awk 你可以想到 awk 作为自己的编程语言。但是对于本教程的使用范围 awk ,我们将把它作为一个简单的命令行过滤工具来介绍。

awk 的一般语法是

# awk 'script' filename

script 可以理解的一组命令 awk 并在文件,文件名上执行。

它的工作原理是读取文件中的给定行,制作该行的副本,然后在该行上执行脚本。这在文件中的所有行上重复。

所述 script 的形式是 /pattern/ action 其中 pattern 是一个正则表达式,并且 action 是 awk 在一行中找到给定模式时会做的事情。

如何在 Linux 中使用 awk 过滤工具

在下面的例子中,我们将重点讨论我们在 awk 特性下讨论的元字符。

使用 awk 的一个简单示例:

下面的示例打印 /etc/hosts 文件中的所有行,因为没有给出模式。

# awk '//{print}'/etc/hosts
将 awk 与模式一起使用:

我在下面的例子中, localhost 已经给出了一个模式,所以 awk 将在 /etc/hosts 文件中匹配 localhost 。

# awk '/localhost/{print}' /etc/hosts
在模式中使用带有 (.) 通配符的 awk

在 (.) 将匹配包含字符串 loc , localhost , localnet 在下面的例子中。

也就是说 l some_single_character c .

# awk '/l.c/{print}' /etc/hosts
在模式中使用带有 (*) 字符的 awk

它将匹配包含的字符串 localhost , localnet , lines , capable ,如下例所示:

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

你还将意识到 (*) 尝试为你提供它可以检测到的最长匹配。

让我们看一个例子来证明这一点,采用正则表达式 r*z ,这意味着匹配以字母开头 r 并以 z 以下行结尾的字符串:

this is rumenz, where you get the best good tutorials, how to's, guides, rumenz.

使用模式时,你将获得以下可能性 /r*z/ :

this is r
this is rumenz
this is rumenz, where you get r
this is rumenz, where you get the best good r
this is rumenz, where you get the best good tutorials, how r
this is rumenz, where you get the best good tutorials, how tos, guides, r
this is rumenz, where you get the best good tutorials, how tos, guides, rumenz

并 (*) 在 /r*z/ 通配符中允许 awk 选择最后一个选项:

this is rumenz, where you get the best good tutorials, how to's, guides, rumenz
将 Awk 与 set [ character(s) ] 一起使用

以 set 为例 [al1] ,这里 awk 将匹配文件中包含字符 a 或 l 或 1 在一行中的所有字符串 /etc/hosts .

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

下一个示例匹配以 K 或 k 开头的字符串 T :

# awk '/[Kk]T/{print}' /etc/hosts
指定范围内的字符

用awk理解字符:

  1. [0-9] 表示一个数字
  2. [a-z] 表示匹配单个小写字母
  3. [A-Z] 表示匹配单个大写字母
  4. [a-zA-Z] 表示匹配单个字母
  5. [a-zA-Z 0-9] 表示匹配单个字母或数字

让我们看下面的例子:

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

文件中的所有行 /etc/hosts[0-9] 在上面的例子中至少包含一个数字。

将 Awk 与 (^) 元字符一起使用

它匹配以以下示例中提供的模式开头的所有行:

# awk '/^fe/{print}' /etc/hosts
# awk '/^ff/{print}' /etc/hosts
将 Awk 与 ($) 元字符一起使用

它匹配所有以提供的模式结尾的行:

# awk '/ab$/{print}' /etc/hosts
# awk '/ost$/{print}' /etc/hosts
 
推荐文章
闷骚的李子  ·  Ubuntu Apache vhost不执行php小记 - 五毛钱的饼 - 博客园
3 月前
星星上的苦咖啡  ·  在 SQL Server 中使用 JSON 資料 - SQL Server | Microsoft Learn
4 月前
爱热闹的打火机  ·  2024年开封市事业单位公开招聘联考工作的公告-开封市人力资源和社会保障局
1 年前
帅呆的毛衣  ·  一日一技:Scrapy 如何正确 Post 发送 JSON 数据-腾讯云开发者社区-腾讯云
2 年前
满身肌肉的熊猫  ·  联系人姓名长度超过限制,请检查后再试 | 微信开放社区
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号