regex - 在 linux shell 中使用正则表达式从文本文件中提取字符串、grep IP 地址但使用 CIDR 排除子网
问题描述
我需要解析一个包含多行 IP 信息的文本文件,但我想提取 IP 地址,但使用 grep 和正则表达式排除带有 CIDR 的子网。
示例文本行:
Removed host entry 10.43.160.72 @10.43.160.64/26-> esjc-test-sr90p
Removed host entry 10.26.232.157 @10.26.232.0/22-> esjc-test-sr90p
期望的输出:
10.43.160.72
10.26.232.157
目前我正在使用:
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" test
但这也包括我想避免的子网信息。
谢谢!
解决方案
第一种解决方案:使用您显示的示例,您能否尝试以下操作。用 GNU 编写和测试grep
。
grep -E -o '([0-9]{1,3}[\.]){3}[0-9]{1,3}(\s|$)' Input_file | cut -d' ' -f1
第二种解决方案:如果您可以接受awk
,请尝试以下操作。
awk '{for(i=1;i<=NF;i++){if($i~/^([0-9]+\.){3}[0-9]+$/){print $i}}}' Input_file
或使用 OP 使用的正则表达式(稍加调整)尝试以下操作:
awk '{for(i=1;i<=NF;i++){if($i~/^(([0-9]{1,3})\.){3}[0-9]{1,3}$/){print $i}}}' Input_file
推荐阅读
- javascript - 列表的 JavaScript RegExp 问题
- java - 启动 Spring Boot 应用程序的 Linux 命令
- akka.net - 在 Akka.Net 中,我们可以从 Tcp 演员派生 TcpStream 演员吗?
- powershell - Powershell Get-Random 仅返回最小值
- php - 如何在laravel中的dompdf pdf中显示马拉雅拉姆语字符
- python - 在 FastAPI 中避免重复的代码片段石墨烯
- mysql - '.*' 在 SQL 中的 REGEXP 的情况下有什么作用?
- shopify - 如何使用 php 或 node js 创建 shopify GDPR webhooks?
- java - 如何将带有数组的json数组解析为带有Set的java对象
- apache - Apache 在 SAP hybris 中提供媒体文件