第4.1节:使用正则表达式

1 第4.1节:使用正则表达式

将正则表达式用斜杠括起来,就能用作模式。随后,该正则表达式会与每条输入记录的完整文本进行比对。(通常情况下,它只需匹配文本的部分内容就能视作匹配成功。)例如,以下代码会打印出mail-list文件中,任意位置出现字符串li的记录的第二个字段:

bash 复制代码
$ awk '/li/ { print $2 }' mail-list

执行结果:

bash 复制代码
555-5553
555-0542
555-6699
555-3430

正则表达式也能用于匹配表达式中。这些表达式允许你指定要匹配的字符串,该字符串不必是当前输入记录的全部内容。~!~这两个操作符用于执行正则表达式的比较操作。使用这些操作符的表达式,既可以用作模式,也能在ifwhilefordo语句中使用(详见第7.4节 "动作中的控制语句")。例如,对于以下表达式,如果exp(作为字符串看待)与regexp匹配,则表达式的值为真:

bash 复制代码
exp ~ /regexp/

下面的示例会匹配(筛选出)所有第一个字段中含有大写字母J的输入记录:

bash 复制代码
$ awk '$1 ~ /J/' inventory-shipped

执行结果:

bash 复制代码
Jan 13 25 15 115
Jun 31 42 75 492
Jul 24 34 67 436
Jan 21 36 64 620

下面这段代码也能实现相同的功能:

bash 复制代码
awk '{ if ($1 ~ /J/) print }' inventory-shipped

再看下面这个例子,如果exp(作为字符串看待)与regexp不匹配,那么表达式的值为真:

bash 复制代码
exp !~ /regexp/

下面的示例会匹配(筛选出)所有第一个字段中不包含大写字母J的输入记录:

bash 复制代码
$ awk '$1 !~ /J/' inventory-shipped

执行结果:

bash 复制代码
Feb 15 32 24 226
Mar 15 24 34 228
Apr 31 52 63 420
May 16 34 29 208

当一个正则表达式被包含在斜杠中,如/foo/,我们称其为正则表达式常量,这与5.27是数值常量、"foo"是字符串常量的概念类似。


作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动) (注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!

Copyright © 2022~2025 All rights reserved.

相关推荐
大熊猫侯佩6 小时前
Swift 6.2 列传(第十二篇):杨不悔的“临终”不悔与 Isolated Deinit
swift·编程语言·apple
大熊猫侯佩6 小时前
深夜的代码惊魂:一个你绝对不能再犯的 Swift 错误
swift·编程语言·apple
大熊猫侯佩20 小时前
Swift 6.2 列传(第十一篇):梅若华的执念与“浪子回头”的异步函数
swift·编程语言·apple
HyperAI超神经2 天前
活动回顾丨 北大/清华/Zilliz/MoonBit共话开源,覆盖视频生成/视觉理解/向量数据库/AI原生编程语言
人工智能·ai·开源·编程语言·向量数据库·视频生成·视觉理解
图形学爱好者_Wu3 天前
每日一个C++知识点|原子操作
c++·编程语言
大腾鱼4 天前
Web3 学习:Solidity中的结构体、数组和映射
编程语言
gis分享者4 天前
如何在 Shell 脚本中实现文件的读写操作?(容易)
shell·文件·awk·echo·cat··
大熊猫侯佩5 天前
Swift 迭代三巨头(下集):Sequence、Collection 与 Iterator 深度狂飙
swift·编程语言·apple
大熊猫侯佩5 天前
Swift 迭代三巨头(中集):Sequence、Collection 与 Iterator 深度狂飙
swift·编程语言·apple
大熊猫侯佩5 天前
Swift 迭代三巨头(上集):Sequence、Collection 与 Iterator 深度狂飙
swift·编程语言·apple