awk正则表达式(awk正则表达式非匹配数字)

## awk 正则表达式### 简介awk 是一种强大的文本处理工具,其内置了正则表达式引擎,可以高效地进行模式匹配和文本操作。awk 中的正则表达式使用扩展正则表达式语法 (ERE),提供了丰富的元字符和操作符,使得文本处理更加灵活和高效。### 正则表达式语法#### 1. 基本元字符| 元字符 | 说明 | |---|---| | . | 匹配任意单个字符,除换行符 \n | |

| 匹配前一个字符零次或多次 | | + | 匹配前一个字符一次或多次 | | ? | 匹配前一个字符零次或一次 | | ^ | 匹配字符串开头 | | $ | 匹配字符串结尾 | | [...] | 匹配字符组中的任意一个字符 | | [^...] | 匹配不在字符组中的任意一个字符 | | (pattern) | 将匹配的字符串作为子表达式捕获 | | \| | 或运算符,匹配两个模式中的任意一个 |#### 2. 字符类| 字符类 | 说明 | |---|---| | \w | 匹配字母、数字和下划线 | | \W | 匹配非字母、数字和下划线 | | \s | 匹配空白字符,如空格、制表符等 | | \S | 匹配非空白字符 | | \d | 匹配数字 | | \D | 匹配非数字 |#### 3. 量词| 量词 | 说明 | |---|---| | {n} | 匹配前一个字符或表达式 n 次 | | {n,} | 匹配前一个字符或表达式至少 n 次 | | {n,m} | 匹配前一个字符或表达式至少 n 次,最多 m 次 |### awk 中的正则表达式应用#### 1. 模式匹配awk 中可以使用 `/pattern/` 的形式进行正则表达式匹配,匹配成功的行将被处理。```awk # 打印以 "error" 开头的行 awk '/^error/' file.txt ```#### 2. 条件语句中的正则表达式awk 的条件语句中可以使用正则表达式进行判断。```awk # 打印包含 "warning" 的行 awk '$0 ~ /warning/ {print $0}' file.txt ```#### 3. 匹配操作符awk 提供了 `~` 和 `!~` 两个匹配操作符:

`~`: 如果字符串匹配正则表达式,则返回 true

`!~`: 如果字符串不匹配正则表达式,则返回 true```awk # 打印不包含数字的行 awk '$0 !~ /[0-9]/ {print $0}' file.txt ```#### 4. 子表达式使用括号 `()` 可以捕获匹配的子表达式,并使用 `$1`,`$2` 等变量访问。```awk # 打印以 "2023-" 开头的日期字符串 awk '/^(2023-[0-9]{2}-[0-9]{2})/ {print $1}' file.txt ```### 示例假设我们有一个文件 `access.log`,记录了网站的访问日志:``` 192.168.1.1 - - [01/Jan/2023:00:00:01 +0800] "GET /index.html HTTP/1.1" 200 542 192.168.1.2 - - [01/Jan/2023:00:00:02 +0800] "GET /images/logo.png HTTP/1.1" 200 1234 192.168.1.3 - - [01/Jan/2023:00:00:03 +0800] "GET /style.css HTTP/1.1" 200 876 ```我们可以使用 awk 和正则表达式进行如下操作:

统计访问次数:`awk '{print $1}' access.log | sort | uniq -c`

查找访问 `/images/` 目录的 IP 地址:`awk '$7 ~ /^\/images\// {print $1}' access.log`

统计每个 IP 地址的访问量:`awk '{ips[$1]++} END {for (ip in ips) print ip, ips[ip]}' access.log`### 总结awk 正则表达式是 awk 中非常重要的功能,熟练掌握正则表达式语法和应用技巧可以极大地提高文本处理效率。

awk 正则表达式

简介awk 是一种强大的文本处理工具,其内置了正则表达式引擎,可以高效地进行模式匹配和文本操作。awk 中的正则表达式使用扩展正则表达式语法 (ERE),提供了丰富的元字符和操作符,使得文本处理更加灵活和高效。

正则表达式语法

1. 基本元字符| 元字符 | 说明 | |---|---| | . | 匹配任意单个字符,除换行符 \n | | * | 匹配前一个字符零次或多次 | | + | 匹配前一个字符一次或多次 | | ? | 匹配前一个字符零次或一次 | | ^ | 匹配字符串开头 | | $ | 匹配字符串结尾 | | [...] | 匹配字符组中的任意一个字符 | | [^...] | 匹配不在字符组中的任意一个字符 | | (pattern) | 将匹配的字符串作为子表达式捕获 | | \| | 或运算符,匹配两个模式中的任意一个 |

2. 字符类| 字符类 | 说明 | |---|---| | \w | 匹配字母、数字和下划线 | | \W | 匹配非字母、数字和下划线 | | \s | 匹配空白字符,如空格、制表符等 | | \S | 匹配非空白字符 | | \d | 匹配数字 | | \D | 匹配非数字 |

3. 量词| 量词 | 说明 | |---|---| | {n} | 匹配前一个字符或表达式 n 次 | | {n,} | 匹配前一个字符或表达式至少 n 次 | | {n,m} | 匹配前一个字符或表达式至少 n 次,最多 m 次 |

awk 中的正则表达式应用

1. 模式匹配awk 中可以使用 `/pattern/` 的形式进行正则表达式匹配,匹配成功的行将被处理。```awk

打印以 "error" 开头的行 awk '/^error/' file.txt ```

2. 条件语句中的正则表达式awk 的条件语句中可以使用正则表达式进行判断。```awk

打印包含 "warning" 的行 awk '$0 ~ /warning/ {print $0}' file.txt ```

3. 匹配操作符awk 提供了 `~` 和 `!~` 两个匹配操作符:* `~`: 如果字符串匹配正则表达式,则返回 true * `!~`: 如果字符串不匹配正则表达式,则返回 true```awk

打印不包含数字的行 awk '$0 !~ /[0-9]/ {print $0}' file.txt ```

4. 子表达式使用括号 `()` 可以捕获匹配的子表达式,并使用 `$1`,`$2` 等变量访问。```awk

打印以 "2023-" 开头的日期字符串 awk '/^(2023-[0-9]{2}-[0-9]{2})/ {print $1}' file.txt ```

示例假设我们有一个文件 `access.log`,记录了网站的访问日志:``` 192.168.1.1 - - [01/Jan/2023:00:00:01 +0800] "GET /index.html HTTP/1.1" 200 542 192.168.1.2 - - [01/Jan/2023:00:00:02 +0800] "GET /images/logo.png HTTP/1.1" 200 1234 192.168.1.3 - - [01/Jan/2023:00:00:03 +0800] "GET /style.css HTTP/1.1" 200 876 ```我们可以使用 awk 和正则表达式进行如下操作:* 统计访问次数:`awk '{print $1}' access.log | sort | uniq -c` * 查找访问 `/images/` 目录的 IP 地址:`awk '$7 ~ /^\/images\// {print $1}' access.log` * 统计每个 IP 地址的访问量:`awk '{ips[$1]++} END {for (ip in ips) print ip, ips[ip]}' access.log`

总结awk 正则表达式是 awk 中非常重要的功能,熟练掌握正则表达式语法和应用技巧可以极大地提高文本处理效率。

Powered By Z-BlogPHP 1.7.2

备案号:蜀ICP备2023005218号