如何在linux shell中使用regexp提取文本部分?假设我有一个文件,其中每一行都有一个IP地址,但位置不同。使用常用unix命令行工具提取这些IP地址的最简单方法是什么?
发布于 2017-07-29 05:37:48
前面的所有答案都有一个或多个问题。接受的答案允许像999.999.999.999这样的ip号码。当前支持率第二高的答案需要以0为前缀,例如127.000.000.001或008.008.008.008,而不是127.0.0.1或8.8.8.8。Apama几乎是正确的,但该表达式要求ipnumber是一行中唯一的内容,不允许前导或尾随空格,也不能从行的中间选择ip。
我认为在http://www.regextester.com/22上可以找到正确的正则表达式。
因此,如果您想从一个文件中提取所有ip地址,请使用:
grep -Eo "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" file.txt如果您不想使用重复项,请使用:
grep -Eo "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])" file.txt | sort | uniq如果此正则表达式中仍然存在问题,请发表意见。这个问题很容易找到很多错误的正则表达式,我希望这个没有真正的问题。
https://stackoverflow.com/questions/427979
复制相似问题