在 awk
中,正则表达式匹配是一个非常强大的功能。可以使用正则表达式来筛选、匹配行或字段内容。awk
支持使用 /pattern/
的语法来匹配数据。
awk '/pattern/ { action }' file
/pattern/
:匹配特定的正则表达式。{ action }
:当匹配到时要执行的操作。假设文件 log.txt
内容如下:
INFO: Everything is working
ERROR: Something went wrong
WARNING: Disk space low
ERROR: Failed to start service
要匹配并打印包含 ERROR
的行:
awk '/ERROR/ { print $0 }' log.txt
输出:
ERROR: Something went wrong
ERROR: Failed to start service
可以对某一特定字段进行正则匹配。例如,只匹配第一列包含特定字符串的行。
假设文件 data.txt
内容如下:
John 85
Doe 60
Alice 75
Bob 90
可以匹配第一列中包含 “John” 的行:
awk '$1 ~ /John/ { print $0 }' data.txt
输出:
John 85
!~
用于匹配不符合正则表达式的行。
awk '!/ERROR/ { print $0 }' log.txt
输出:
INFO: Everything is working
WARNING: Disk space low
awk '$1 !~ /John/ { print $0 }' data.txt
输出:
Doe 60
Alice 75
Bob 90
.
:匹配任意单个字符。*
:匹配前面的字符零次或多次。+
:匹配前面的字符一次或多次。^
:匹配行首。$
:匹配行尾。[abc]
:匹配字符 a
, b
, 或 c
。[a-z]
:匹配从 a
到 z
之间的任意字符。[^abc]
:匹配除 a
, b
, c
以外的任意字符。awk '/^ERROR/ { print $0 }' log.txt
输出:
ERROR: Something went wrong
ERROR: Failed to start service
假设文件 data.txt
内容如下:
John 85
Doe 60
Alice 75A
Bob 90
匹配以数字结尾的行:
awk '/[0-9]$/ { print $0 }' data.txt
输出:
John 85
Doe 60
Bob 90
假设文件 text.txt
内容如下:
abc
a123b
cxyz
foo
匹配包含 a
和 b
之间有任意字符的行:
awk '/a.*b/' text.txt
输出:
a123b
awk
功能使用要统计匹配特定正则表达式的行数,可以结合 END
使用:
awk '/ERROR/ { count++ } END { print "Total ERROR lines:", count }' log.txt
输出:
Total ERROR lines: 2