如何在linux shell中使用regexp提取文本部分?假设我有一个文件,其中每一行都有一个IP地址,但位置不同。使用常用unix命令行工具提取这些IP地址的最简单方法是什么?
发布于 2009-01-09 13:11:28
您可以使用grep将它们提取出来。
grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file.txt发布于 2009-01-09 13:46:53
这里的大多数示例都将匹配999.999.999.999,从技术上讲,这不是一个有效的IP地址。
以下内容将仅匹配有效的IP地址(包括网络和广播地址)。
grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' file.txt如果要查看匹配的整个行,请省略-o。
发布于 2014-08-30 02:08:09
在访问日志中,这对我来说很好。
cat access_log | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}'让我们把它一部分一部分地分解。
[0-9]{1,3}表示出现一到三次[]中提到的范围。在这种情况下,它是0-9。所以它匹配像10或183这样的模式。所以我们现在的模式是“123”。“12”。等。
([0-9]{1,3}\.){3}[0-9]{1,3}如果在我的示例中,in位于每行的开头,请使用:
egrep -o '^([0-9]{1,3}\.){3}[0-9]{1,3}'其中'^‘是一个锚点,它告诉我们在一行的开头进行搜索。
https://stackoverflow.com/questions/427979
复制相似问题